《Java疯狂讲义-Chap5面向对象上》

1.方法重载(overload)
方法重载的要求就是两同一不同:同一个类中方法名相同,参数列表不同。至于方法的其他部分,如方法的返回值类型、修饰符等,与方法的重载没有任何关系。

2.方法重写/覆盖(override)
方法的重写遵循“两同两小一大”规则,“两同”即方法名相同,形参列表相同;“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法生命抛出的异常类应比父类方法声明抛出的异常类更小或相等;“一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。尤其需要指出的是,覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。

3.构造器的执行顺序
创建任何对象总是从该类所在继承树最顶层类的构造器开始执行,然后依次向下执行,最后才执行本类的构造器。如果某个父类通过this调用了同类中重载的构造器,就会依次执行此父类的多个构造器。

4.多态
多态:相同类型的变量,调用同一个方法时呈现出多种不同的行为特征。
与方法不同的是,对象的实例变量则不具备多态性。通过引用变量来访问其包含的实例变量时,系统总是试图访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量。

5.初始化块
当创建Java对象时,系统总是先调用该类里定义的初始化快,如果一个类里定义了多个普通初始化快,则前面定义的初始化块先执行,后面定义的初始化块后执行。
与构造器类似,创建一个Java对象时,不仅会执行该类的普通初始化块和构造器,而且系统会一直上溯到java.lang.Object类,先执行java.lang.Object类的初始化块,再开始执行java.lang.Object类的构造器,返回该类的对象。
与普通初始化块类似的是,系统在类初始化阶段执行静态初始化块时,不仅会执行本类的静态初始化块,而且还会一直上溯到java.lang.Object类(如果它包含静态初始化块),先执行java.lang.Object类的静态初始化块(如果有),然后执行其父类的静态初始化块……最后才执行该类的静态初始化块,经过这个过程,才完成了该类的初始化过程。只有当类初始化完成后,才可以在系统中使用这个类,包括访问这个类的类方法、类变量或者用这个类来创建实例。

例:

public class Root {
    static {
        SubClass.printInfoMethod("Root的静态初始化块");
    }

    {
        SubClass.printInfoMethod("Root的普通初始化块");
    }

    public Root() {
        SubClass.printInfoMethod("Root的无参数构造器");
    }
}



public class Mid extends Root {
    static {
        SubClass.printInfoMethod("Mid的静态初始化块");
    }

    {
        SubClass.printInfoMethod("Mid的普通初始化块");
    }

    public Mid() {
        SubClass.printInfoMethod("Mid的无参数构造器");
    }

    public Mid(String msg) {
        SubClass.printInfoMethod("Mid的带参数构造器,其参数为:" + msg);
    }
}



public class Leaf extends Mid {
    static {
        SubClass.printInfoMethod("Leaf的静态初始化块");
    }

    {
        SubClass.printInfoMethod("Leaf的普通初始化块");
    }

    public Leaf() {
        super("****************");
        SubClass.printInfoMethod("执行Leaf的无参数构造器");
    }

    public static void main(String[] args) {
        new Leaf();
        SubClass.printInfoMethod("==========================\n");
        new Leaf();
    }
}

执行结果为:

Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数构造器
Mid的普通初始化块
Mid的带参数构造器,其参数为:****************
Leaf的普通初始化块
执行Leaf的无参数构造器
==========================

Root的普通初始化块
Root的无参数构造器
Mid的普通初始化块
Mid的带参数构造器,其参数为:****************
Leaf的普通初始化块
执行Leaf的无参数构造器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值