是决定花一段连续的时间把《Java编程思想》看一遍,看书怎么能不做笔记呢,明明知道自己有些地方看完肯定会忘掉的,所以想把每章的笔记重点放在博客上,与大家共享!
第七章 复用类
1.初始化基类
废话不多说,上代码,见码知意
class Art{
Art(){
System.out.println("Art construction");
}
}
class Drawing extends Art{
Drawing(){
System.out.println("Drawing construction");
}
}
public class Cartoon extends Drawing{
public static void main(String[] args) {
//1.调用基类构造器是导出类构造器要做的第一件事
//2.即使是默认构造器,也是这样
//3.要是基类构造器是带参数的,那么必须用关键字super显示编写调用基类构造器的语句
//4.并且参数列表要对应
//5.执行类的所有特定的清理动作,其顺序与生成顺序相反
Cartoon cartoon = new Cartoon();
}
}
2.代理
应用场景:组合和继承的“中和”;要将一个成员对象置于所要构造的类中(就像组合),但与此同时,又要在新类中暴露该成员对象的所有方法(就像继承)。
3.关键字final
- final数据
基本类型,永不改变;对象引用,无法指向另一个对象,但是对象自身可修改。再加上static之后,就表示这是一段不能改变的存储空间。 - final方法
锁定方法,以防止任何继承类修改它的含义
class WithFinals{
private final void f(){
System.out.println("WithFinals.f()");
}
private void g(){
System.out.println("WithFinals.g()");
}
}
class OverridingPrivate extends WithFinals{
private final void f(){
System.out.println("OverridingPrivate.f()");
}
private void g(){
System.out.println("OverridingPrivate.g()");
}
}
class OverridingPrivate2 extends OverridingPrivate{
public final void f(){
System.out.println("OverridingPrivate2.f()");
}
public void g(){
System.out.println("OverridingPrivate2.g()");
}
}
public class FinalOverridingIllusion {
public static void main(String[] args) {
OverridingPrivate2 op2 = new OverridingPrivate2();
op2.f();
op2.g();
OverridingPrivate op = op2;
//!op.f();
//!op.g();
//想要调用覆盖的f()和g(),只能进行强制转型
((OverridingPrivate2) op).f();
((OverridingPrivate2) op).g();
}
}
- final类
当某个类整体被定义为final类,与前面一样,不能对类做任何修改,包括不能有子类执行继承。