您的位置:首页 > 其它

继承的约束:构造器不可调用被覆盖的方法

2013-03-24 18:34 330 查看
下面这个类就违反了此条规则,例子如下:

public class Super {

public Super() {
// 构造器中调用被覆盖的方法
overrideMe();
}

public void overrideMe() {

}

static final class Sub extends Super {
private final Date date;

public Sub() {
date = new Date();
}

@Override
public void overrideMe() {
System.out.println(date);
}
}

public static void main(String[] args) {
Sub sub = new Sub();
sub.overrideMe();
}
}


输出结果:

null

Sun Mar 24 18:35:26 CST 2013

你可能会期待这个程序会打印出两次日期,但是它第一次打印为null,因为overrideMe 方法被Super构造器调用的时候,子类Sub构造器还没机会初始化date变量。注意:

这个程序观察到的final域处于两种不同的状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐