再探java成员在继承时初始化的相关问题
来源:互联网 发布:java计算器界面代码 编辑:程序博客网 时间:2024/06/06 18:37
先看以下代码的运行结果:
// StrangeConstructor.java// A strange behavior of constructor// when it calls an abstract methodabstract class Shape {public abstract void draw();public Shape() {System.out.println("Shape's constructor");System.out.println("Before draw()");draw();System.out.println("After draw()");}}class Circle extends Shape {private int i = 1;private static int j = 4;public void draw() {System.out.println("Circle's draw()");System.out.println("i = " + i + ", j = " + j);}Circle() {System.out.println("Circle's constructor");System.out.println("i = " + i + ", j = " + j);}}public class StrangeConstructor {public static void main(String[] args) {Circle c = new Circle();}}
可见静态成员变量可以得到正确的初始化。但是问题出现在动态成员变量:初始化在这种情况下出现问题。
如果把Circle类成员的初始化放到构造器里,则会统一:都得不到正确的初始化:
在构造基类时,运行到draw方法时,因为是抽象的,所以找到了Circle的draw方法。此时Circle的构造器还没有运行,出现了以上的奇怪现象。因此,在构造器中调用抽象方法应该十分小心。
0 0
- 再探java成员在继承时初始化的相关问题
- JAVA类在初始化时成员的加载顺序
- java继承中静态成员变量的初始化顺序
- Java 关于含有继承类的成员初始化过程讲解
- C++类的数据成员的初始化相关问题
- Java静态成员初始化问题
- JAVA在类继承中类成员变量“重写”的问题
- Java继承,在构造函数内对父类初始化的问题
- java继承的初始化
- JAVA的继承初始化
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java 构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- Java构造时成员初始化的陷阱
- 创建表空间
- 错排公式,推导和应用
- Ruby on ralis 购物车功能实现(一)
- 二十八宿運氣圖
- 不错的计算机书籍收藏
- 再探java成员在继承时初始化的相关问题
- NCL的简介和安装方法
- 传统媒体的垂死挣扎
- 成员变量(也叫实例变量)若不明确赋值,会自带一个默认值。
- ubuntu 下java环境配置
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第六课
- 电源管理之android内核suspend to disk的实现(二)
- Hibernate批处理操作优化 (批量插入、更新与删除)
- StringBuilder与StringBuffer的区别(转)