此章我们主要谈下面向对象编程的代码复用机制。
继承
继承是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!
相关推荐
13.5.1 公共对象请求代理体系结构(CORBA) 207 13.5.2 Web服务定义 210 13.5.3 Web服务代码 213 13.5.4 Invoice.cs 214 13.5.5 Invoice.vb 215 13.6 小结 216 13.7 参考书目 216 第14章 对象和客户/服务器应用...
当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不必迫不及待地翻阅手头的字典。 另外,这也不是一篇高级专题技术论文,而是一本关于设计模式的书,它...
多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部...
4,工厂方法模式:定义一个创建对象的接口,但由子类觉得要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 5,抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 6,...
客户端分辨不出代理主题对象与 真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象 的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代 为创建并传入。 13...
虽然圆形、矩形和按钮是不同的类,但他们都继承于 Paint 类的,那么使用享元模式(享元类为:FlyWeight)就不会出错了。 2.1.3 组合模式 在这个系统中,我们使用组合模式来实现画组合图。在组合模式中,客户端可以...
继承的概念被用来组合接口和定义组合对象获得新功能的方式。 [x] 适配器模式 [x] 桥接模式 [x] 过滤器模式 [x] 组合模式 [x] 装饰器模式 [x] 外观模式 [x] 享元模式 [x] 代理模式 行为型 这些设计模式特别关注对象...
第4章对象与类 4.1面向对象程序设计概述 4.1.1 OOP词汇表 4.1.2对象 4.1.3类之间的关系 4.1.4 00P与传统的过程化程序设计技术对比 4.2使用现有类 4.2.1对象与对象变量 4.2.2 Java库中的...
5.8 继承与组合 154 5.8.1 使用继承的注意点 155 5.8.2 利用组合实现复用 156 学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 ...
软件设计模式知识点 软件设计模式是解决软件设计问题的一种方法,旨在提高软件系统的灵活性、可维护性和可重用性。软件设计模式可以分为三类:...7. 合成聚合复用原则(CARP):优先使用对象合成/聚合,而不是类继承。
继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite Pattern) 装饰器模式...
对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以...
第4章 在C#中使用类和对象 第5章 继承 · · · · · · (更多) 第一部分 C#面向对象程序设计 第1章 设计模式概述 第2章 C#语言的语法 第3章 用C#编写Windows程序 第4章 在C#中使用类和对象 第5章 继承 第6章 UML...
它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 装饰(Decorator)模式:动态的给对象增加一些职责,即增加其额外的功能。 外观(Facade)模式:为多个复杂的子系统提供一个...
当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不必迫不及待地翻阅手头的字典。 另外,这也不是一篇高级专题技术论文,而是一本关于设计模式的书,它描述了...
使用类再生的两个方式:组合(new)和继承(extends),这个已经在 thinking in java中提到过. 设计模式之 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用...
第4章对象与类 4.1面向对象程序设计概述 4.1.1 OOP词汇表 4.1.2对象 4.1.3类之间的关系 4.1.4 00P与传统的过程化程序设计技术对比 4.2使用现有类 4.2.1对象与对象变量 4.2.2 Java库中的...