java中的继承 和 重写_java中的方法重写和继承

请考虑以下代码段:

class A{ /* assume static and non static block are here */ }

class B extends A{ /* assume static and non static block are here */ }

在主要方法中,

new B();

所以初始化的顺序是:

> A类的静态成员初始化

> B类的静态成员初始化

> A类的非静态成员初始化

>然后在构造函数A中执行代码

> B类的非静态成员初始化

>然后在构造函数B中执行代码

现在来看看这段代码,

class A{

A(){

this.m(); //line 1

}

void m(){

System.out.println("A.m()");

}

}

class B extends A{

void m(){

System.out.println("B.m()");

}

}

在主要方法中,

new B();

当正在执行构造函数A的代​​码时,它只能看到类A中的方法m,因为尚未为类B初始化非静态成员(根据我提到的顺序).

但结果是“B.m()”. (已经执行了子类的方法)

考虑到我提到的顺序,有人可以解释这里发生的事情(方法覆盖)吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值