此章我们主要谈下面向对象编程的代码复用机制。
继承
继承是OOP中最为重要的概念,达到了非常有效的代码重用效果,使得开发效率变得很高!在Java语言中,两个类之间通过extends关键字实现继承。
class A { public A() { System.out.println("A()!"); } } class B extends A { public B() { System.out.println("B()!"); } } public class ExtendsTest extends B { public ExtendsTest() { System.out.println("ExtendsTest()!"); } public static void main(String[] args) { new ExtendsTest(); } }
ExtendsTest继承自B,B继承自A,当实例化ExtendsTest的时候,依次打印出A、B、ExtendsTest构造器中的内容,说明:构造器被依次调用了;当子类实现继承时,相当于父类给子类一个实例,故先构造实例,实验中得出结论:在对子类进行初始化的时候,会先调用父类的构造器,如果父类构造器需要传递参数,则使用super关键字来实现就行了。
1、子类不能继承父类私有的域(属性)或者方法。如果想要继承父类的私有对象,只能将private改成protected,因为protected的权限控制在包内。因此一般情况,用到继承的话,最好将父类中的域声明为私有(private,因为一般情况不需要继承成员变量),将方法声明为public,方便继承。
2、当调用子类方法,如果子类有,则屏蔽父类方法;,如果子类没有,则去调用父类的同名方法,但是调用者保持是子类。
代理
代理的思想在我们讲得设计模式里面有体现,就是在一个类中持有另一个类的实例,从而代替原类进行一个操作,我们看个例子:
public class ProxyTest { Source source = new Source(); void p(int n){ source.a(n); } void p2(int n){ source.b(n); } public static void main(String[] args) { ProxyTest pt = new ProxyTest(); pt.p(20); pt.p2(50); } } class Source{ void a(int n){ System.out.println("this is : "+n); } void b(int n){ System.out.println("this is : "+n); } }
组合
如果大家还记得设计模式里的建造者模式,那么很容易联想到组合机制,就是将一系列的对象组合在一起,组合成一个功能丰富的类,当然,这些对象包括基本数据类型,也包括引用。来看个例子:
class Soap{ private String s; Soap(){ System.out.println("soap"); s = "constructor"; } public String toString(){ return s; } } public class CompronentTest { private String s1 = "happy",s2="Happy",s3,s4; private Soap castille; private int i; public CompronentTest(){ s3 = "joy"; castille = new Soap(); } { i = 88; } public String toString(){ if(s4 == null){ s4 = "Joy"; } return "s1 = " + s1 + "\n" + "s2 = " + s2 + "\n" + "s3 = " + s3 + "\n" + "s4 = " + s4 + "\n" + "i = " + i + "\n" + "castille = " + castille; } public static void main(String[] args) { CompronentTest ct = new CompronentTest(); System.out.println(ct); } }
懒加载涉及持有对象实例,所以会涉及到懒加载的机制,代码中的:
if(s4 == null){
s4 = "Joy";
}
就是一种懒加载的机制,这种机制就是解决当所需的对象比较庞大的时候,只有在用的时候才去初始化,节省空间,提高效率!
Java中跳出循环的方法:
break是跳出当前for循环,switch语句;
break会跳出(终止)当前循环,continue是跳出当前循环,开使下一循环;
以上两种方法没有办法跳出多层循环,如果需要从多层循环跳出,则需要使用标签,定义一个标签label,然后再需要跳出的地方,用break label就行了,代码如下:
public class RecTest { public static void main(String[] args) { loop: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { for (int k = 0; k < 10; k++) { for (int h = 0; h < 10; h++) { if (h == 6) { break loop; } System.out.print(h); } } } } System.out.println("\nI'm here!"); } }
012345
I'm here!
continue同理;
012345 012345 012345 012345 012345 012345 012345 012345 012345 012345 //h=6时,跳到loop,执行下一个for命令;
I'm here!
相关推荐
本资源“C语言实现对象编程之继承代码.rar”提供了两种方法来实现C语言中的继承概念。 1. 结构体模拟类: 在C语言中,我们可以使用结构体来模拟类的概念。一个结构体可以看作是对象的蓝图,其中包含了对象的数据...
关于Python类与对象的知识点非常丰富,我将从类与对象的基本概念、特殊方法、继承与多态以及相关的编程技巧等方面进行详细总结。 首先,Python作为一种面向对象编程语言,它允许我们将数据和功能组织成类(class)...
以示例分析,乘客和代理人是人所扮演的不同角色,不适合使用继承,而更适合使用组合,因为它们不是人这个类的特殊类型。相反,预订和购买是交易的特殊类型,符合继承的标准,因此可以使用继承来表示这种关系。 总的...
此外,还可以通过继承、组合以及使用设计模式如装饰器模式来构建代理。 总结来说,代理模式是一种灵活的设计策略,它允许我们在不修改原有系统的基础上,通过引入代理对象来扩展系统的功能,提高代码的可复用性和可...
代理类可以继承自目标类(如果目标类是final的,可以使用组合),或者通过实现InvocationHandler接口。 4. ** 字节码操作 **: Javaassist允许我们直接操作字节码,例如,通过`CodeAttribute`对象,我们可以插入或...
本文将深入探讨“面向对象设计原则.pdf”文档中提及的关键知识点,包括面向对象设计的基本法则,以及组合与继承这两种重要的设计模式。 ### 组合优先于继承 文档中的第一条法则强调了“优先使用组合,而非继承”。...
在C++中,代理模式可以通过类的继承或者对象的组合来实现。例如,`ProxyPattern.cpp`和`ProxyPattern.h`可能是实现代理模式的代码文件。`ProxyPattern.cpp`可能包含代理对象的实现,而`ProxyPattern.h`则定义了代理...
1. 如果一个类是角色或状态的表达,如“乘客”或“代理人”,那么继承可能不合适,应该使用组合。 2. 当子类代表特定类型的角色,如“PersonRole”,并且不需转化为其他类,继承是合适的。 3. 类如“预订”和“购买...
### 设计模式之代理 #### 一、设计模式概述 设计模式是在软件设计过程中解决常见问题的一种标准化解决方案。它提供了一种系统化的解决方案,帮助开发者处理在软件开发中经常遇到的问题,提高代码的复用性、灵活性...
它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更...
结构型设计模式关注类或对象的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。这些模式主要用来构建复杂系统的架构,通过组合不同的类或对象,实现更加灵活的设计和良好的封装...
通过分析ACE继承层次图,我们可以看到ACE框架是如何通过类的继承和组合来构建一个灵活且强大的网络编程工具包的。这些类之间紧密相连,共同协作完成各种网络任务。理解这些类之间的关系有助于开发者更好地利用ACE来...
4. **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。C#中的建造者模式通常包含一个导演类(Director)来协调组件的构建。 5. **原型模式**:通过复制已有对象来创建新对象,...
结构型设计模式关注于如何通过组合类或对象来构建更大的结构,以达到新的功能。这些模式通常用于创建复杂的类结构或者优化现有系统的架构。 **结构型模式的关键点包括:** - **动态组合对象**:结构型模式强调如何...
类继承方式是让代理类继承目标类,从而共享相同的接口,但在实际应用中,由于C++的多继承特性可能导致钻石问题,因此更多地使用对象组合方式,即代理类持有目标对象的引用或指针,通过调用目标对象的方法来实现对...
6. **合成复用原则**:优先使用对象组合,而不是类继承。 ### 设计模式 设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证...
静态代理是最基础的形式,它需要程序员手动创建一个代理类,该类实现了与目标类相同的接口。代理类持有目标类的引用,并在调用目标类方法之前或之后添加额外的逻辑。这种方式的优点是代码清晰,易于理解;缺点是如果...
4. 实现:抽象类与接口之间的关系。 抽象类: * 用 abstract 修饰类,即为抽象类。 * 抽象类不能创建对象,也就是不能被实例化。 * 抽象类中可以包含抽象成员(方法、变量、属性等)。 * 抽象方法:用 abstract ...
本文将深入探讨这两个主题以及与之相关的UML(统一建模语言)图表。 首先,设计模式是一种在特定上下文中解决常见问题的最佳实践。它们是经验丰富的软件工程师在长期实践中总结出的解决方案模板,可以被反复应用到...
它通常分为类适配器和对象适配器,类适配器通过继承来完成接口转换,对象适配器则通过组合来完成。 设计模式是软件工程的重要组成部分,能够帮助开发者编写更清晰、更灵活、更易于维护的代码,是软件开发不可或缺的...