继承的约束:构造器不可调用被覆盖的方法
2013-03-24 18:34
330 查看
下面这个类就违反了此条规则,例子如下:
输出结果:
null
Sun Mar 24 18:35:26 CST 2013
你可能会期待这个程序会打印出两次日期,但是它第一次打印为null,因为overrideMe 方法被Super构造器调用的时候,子类Sub构造器还没机会初始化date变量。注意:
这个程序观察到的final域处于两种不同的状态。
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域处于两种不同的状态。
相关文章推荐
- Super不要在Super构造器中调用覆盖方法
- 继承之重写(覆盖)父类方法的约束总结
- 在eclipse3.2.1中无法覆盖和调用继承的父类方法!
- 构造器决不能调用可被覆盖的方法
- java 关于继承中构造器和方法的调用
- JS中子类中如何调用父类的同名方法(继承时候,父类的同名方法被覆盖了)
- 从父类构造器调用子类覆盖方法看Java初始化过程
- C#中通过类来继承两个接口,父类实例化接口中的方法,子类继承父类,调用方法
- 第二节类的继承、方法的重载、方法的重写、对象的引用和构造器
- 设置图片的工具类 在BaseApplication类中继承Application并调用方法
- 如何调用继承了httpservlet的类中自己写的方法
- 子类继承父类(父类和子类里:块、静态块、构造和方法覆写)之间调用顺序
- 41_面向对象_14_继承_super_构造器的调用_继承的内存分析(非常重要)
- 多态、继承---常量的覆盖和方法的重写
- 类继承接口, 通过接口对象new继承类的类(包含派生类),调用对象方法,其实其第一个接口继承的
- JAVA_继承演示03_ExtendsDeamo01.java super关键字 重写父类的方法,中,调用父类的方法
- 继承 子类对父类方法的覆盖 构造方法的继承 super
- A.4-继承,方法重写(覆盖)(override),虚函数(virtaul)和多态,抽象方法和抽象类abstract,密封类(sealed)和密封方法,常量的定义(const)
- 【C#】不能像使用方法那样使用不可调用的成员"System.Data.DataSet.Tables".
- 继承类或实现接口时对原有方法覆盖时异常抛出声明的规则