Java编程思想复用类

1.两种复用类的方法:组合和继承。

2.组合在新的类中使用现有类的对象当成员。初始化引用的地方包括:1).定义对象的地方,先于构造器初始化前调用。2).类的构造器中。3).当要使用对象之前进行初始化,这叫做惰性初始化。4).使用实例初始化。

3.子类通过继承得到基类中的所有域和方法,包括静态成员。只能够访问public成员和protected成员。当创建子类的对象时,该对象包括一个父类的子对象。这个子对象跟用父类直接创建的对象是一样的。基类的子对象被包装在子类对象的内部。

4.子类对象初始化的顺序:先执行完基类的初始化,再执行子类的初始化。子类的构造器中的第一行代码(起始处)必须是对父类构造器的调用。

5.代理:将一个成员对象置于所要构造的类中(就像组合),但与此同时在新类中暴露该成员对象的所有方法(就像继承)。具体方法是通过调用成员对象相应的方法来实现。好处:相对于继承,我们可以选择只提供在成员对象中的方法的某个子集。

6.同时使用组合和继承。当必须进行清理活动时,由于不知道垃圾回收器何时被调用和是否被调用,就必须显式的编写一个特殊方法来做清理工作,并要确保客户端程序员知道必须调用此方法。

7.执行清理工作的次序:先执行自身的清理方法,再执行成员的清理方法,最后执行基类的清理方法。

8.最好的办法是除了内存以外,不依赖垃圾回收器做任何事,如果需要清理,最好自己编写清理方法,但不要使用finalize()。

9.Java中在子类重载父类的某个方法(参数不一样),不会屏蔽其在基类的任何版本(不像c++).

@Override注解可以防止不想重载时而意外重载了方法。

10.在组合与继承之间选择:组合技术通常是想在新类中使用现有类的功能而非它的接口这种情形。

11.protected关键字指明了就类用户而言,这是private的,但对于继承于此类的子类或同一包的其他类而言,它却是可以访问的。

12.在向上转型的过程中,类接口中唯一可能发生的事是丢失方法,而不是获取它们。

13.final关键字通常指无可改变的。

1).final数据:变量在初始化后,对于基本类型变量而言,使数值恒定不变。对对象引用而言,使引用不能改为指向其他的对象。static和final修饰的数据表示对象内外都是不变的。而final修饰的数据表示对象内不变。空白final指的是被声明为final而没给初值的域,由于编译器得确保空白final在使用前必须被初始化,所以得在域的定义处或者每个构造器中对final域进行赋值。方法中的final参数意味着在方法中无法更改参数引用所指向的对象。

2).final方法:第一个功能:把方法锁定,不能被子类所覆盖修改。第二个功能:提高效率,跟编译器的内嵌调用有关。但在Java 6以后,在考虑给方法加final时应该忽略第二个功能。类中的private方法隐式地指定为final,由于无法获取private方法,也就无法覆盖它。如果某个方法为private,就不是基类的接口的一部分,如果在子类生成同名方法,则并没有覆盖父类的这个方法,仅仅是生成一个新的方法。

3).final类:当将类定义为final时,表明该类无法被继承,没有子类。final对类的作用不影响final对类的域的作用,但当有final修饰类时,final类中的所有方法都隐式指定为final,所以不需要用final修饰方法。

14.初始化和类的加载:每个类的编译代码都存在于自己的独立文件中,只有在需要使用程序代码时,才会被加载。当创建类的第一个对象,访问static域或static方法(包括构造器)时,会加载类。

15.加载的过程:首先访问某类的main方法,加载器开始启动寻找该类的编译代码,对它进行加载的过程中,编译注意到它有个基类,于是它继续加载基类,如此类推。根基类的static初始化会被执行,然后是下一个子类的,以此类推。子类的static初始化可能会依赖于父类成员能否被正确初始化。

16.对象创建过程:首先对对象的所有成员设置为默认值,这是通过将对象内存设为二进制零值而一举生成的,然后基类的构造器被调用。最后子类的构造器的其余部分被执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值