java初始化相关

package test;

import static test.MyPrint.println;

/**
 * Created by wangsong on 17-9-9.
 */
public class TestExtends {

    public static void main(String[] args) {
        Derived d = new Derived();
        println(d.str); //输出为declared
    }
}

class Base {

    Base() {
        proceed();
    }

    void proceed() {
        println("父类的proceed");
    }
}

class Derived extends Base {
    @Override
    void proceed() {
        println("子类的proceed");
        str = "proceed";
    }

    String str = "declared";
}

在new Derived的实例时,会隐式调用父类Base的构造器,即会执行proceed方法,执行的是子类Derived的proceed方法,因为执行的是哪个类的方法由这个引用具体指向哪个对象决定,所以执行的是子类的proceed方法。在子类Derived的构造器中,先执行str = “porceed”, 再执行str = “declared”,所以输出为declared。
语句String str = “declared”实际上是一个声明和赋值语句,赋值经过编译器优化,最终放到构造器里面执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值