《Java编程思想》(笔记7)-- 复用类

是决定花一段连续的时间把《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类,与前面一样,不能对类做任何修改,包括不能有子类执行继承。
祝进步

猜你喜欢

转载自blog.csdn.net/zhaohancsdn/article/details/88712551
今日推荐