复用类
组合语法
每一个非基本数据类型的对象都有一个tostring方法
编译器并不是简单地为每一个引用都创建默认对象:
- 在定义对象的地方。这意味着它们总是能够在构造器被调用之前被初始化
- 在类的构造器中
- 在使用这些对象之前,这种方式成为惰性初始化。
- 使用实例化初始化
继承语法
初始化基类
带参数的构造器
super显式地编写调用基类构造器得语句,并且配以适当得参数列表
结合使用组合和继承
在组合与继承之间得选择
组合和继承都允许在新的类中放置子对象,组合是显式得这样做,而继承则是隐式地做。
在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口。未达到此效果,需要在新类中嵌入一个现有类的private对象
protected
就类的用户而言,这是private的,但对于任何继承与此类的导出类或其他任何位于同一个包内的类来说,他却是可以访问的
向上转型
继承最重要的方面是用来表示新类和基类之间的关系。
导出类是基类的一个超集,他可能比基类含有更多的方法,但必须至少具备基类中所含有的方法
final关键字
-
final数据
- 一个永不变的编译时常量
- 一个在运行是被初始化的值,而你不希望它被改变
一个即是static又是final的域只占据一段不能改变的存储空间
对于基本数据类型,final使数值恒定不变;而对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象
val_three 是一种更加典型的对常量进行定义的方式:定义为public,则可以被用于包之外;定义为static,则强调只有一份;定义为final,则说明它是一个常量
-
final方法
- 把方法锁定,以防止任何继承修改它的含义;想要确保再继承中使方法行为保持不变,并且不会被覆盖
- 提高效率;
-
final和private关键字
类中所有的private方法都隐式地指定为final地。因为无法取用private方法,所以也就无法覆盖他。可以对private方法添加final修饰符
“覆盖”只有再某方法是基类地接口地一部分时才会出现。即,必须能将一个对象向上转型为他的基本数据类型并调用相同地方法
-
final类
将类定义为final时,该类不能被继承,而且不允许其他人人对其进行继承
初始化及类的加载
-
继承域初始化
所有的类都已加载完毕,才能创建对象