继承与初始化和构造器的调用
来源:互联网 发布:淘宝欧时力有正品吗 编辑:程序博客网 时间:2024/06/07 17:22
调用构造器要遵循以下顺序:1、调用基类构造器。这个步骤会不断反复递归下去,首先是构造这种层次结构的根,然后是下一层导出类,等等,直到最底层的导出类。2、按声明顺序调用成员的初始化方法。3、调用导出类构造器的主体。
继承与初始化请看下例:class Insect {private int i = 9;protected int j;// protected static int j; 上转型时 j 不再初始化,为39Insect() {System.out.println("i=" + i + ",j=" + j);j = 39;}private static int x1 = printInit("static Insect.x1 initialized");static int printInit(String s) {System.out.println(s);return 47;}}public class Beetle extends Insect {private int k = printInit("Beetle.k initialized");public Beetle() {System.out.println("k=" + k);System.out.println("j=" + j);}private static int x2 = printInit("static Insect.x2 initialized");public static void main(String[] args) {System.out.println("Beetle constructor");Beetle b = new Beetle();System.out.println();Insect a = new Beetle();}}
运行结果:static Insect.x1 initializedstatic Insect.x2 initializedBeetle constructori=9,j=0Beetle.k initializedk=47j=39i=9,j=0Beetle.k initializedk=47j=39
构造器的调用顺序请看下例:class Meal {Meal() {System.out.println("Meal()");}}class Bread {Bread() {System.out.println("Bread()");}}class Cheese {Cheese() {System.out.println("Cheese()");}}class Lettuce {Lettuce() {System.out.println("Lettuce()");}}class Lunch extends Meal {Lunch() {System.out.println("Lunch()");}}class PortableLunch extends Lunch {PortableLunch() {System.out.println("PortableLunch()");}}public class Sandwich extends PortableLunch {private Bread b = new Bread();private Lettuce l = new Lettuce();private Cheese c = new Cheese();public Sandwich() {System.out.println("Sandwich()");}public static void main(String[] args) {new Sandwich();}}
运行结果:
Meal()Lunch()PortableLunch()Bread()Lettuce()Cheese()Sandwich()
运行结果:class Insect {private int i = 9;protected int j;// protected static int j; 上转型时 j 不再初始化,为39Insect() {System.out.println("i=" + i + ",j=" + j);j = 39;}private static int x1 = printInit("static Insect.x1 initialized");static int printInit(String s) {System.out.println(s);return 47;}}public class Beetle extends Insect {private int k = printInit("Beetle.k initialized");public Beetle() {System.out.println("k=" + k);System.out.println("j=" + j);}private static int x2 = printInit("static Insect.x2 initialized");public static void main(String[] args) {System.out.println("Beetle constructor");Beetle b = new Beetle();System.out.println();Insect a = new Beetle();}}
static Insect.x1 initializedstatic Insect.x2 initializedBeetle constructori=9,j=0Beetle.k initializedk=47j=39i=9,j=0Beetle.k initializedk=47j=39
运行结果:class Meal {Meal() {System.out.println("Meal()");}}class Bread {Bread() {System.out.println("Bread()");}}class Cheese {Cheese() {System.out.println("Cheese()");}}class Lettuce {Lettuce() {System.out.println("Lettuce()");}}class Lunch extends Meal {Lunch() {System.out.println("Lunch()");}}class PortableLunch extends Lunch {PortableLunch() {System.out.println("PortableLunch()");}}public class Sandwich extends PortableLunch {private Bread b = new Bread();private Lettuce l = new Lettuce();private Cheese c = new Cheese();public Sandwich() {System.out.println("Sandwich()");}public static void main(String[] args) {new Sandwich();}}
Meal()Lunch()PortableLunch()Bread()Lettuce()Cheese()Sandwich()
0 0
- 继承与初始化和构造器的调用
- 再次认识Java中构造器的初始化与继承
- 继承 完整的初始化方法和便利构造器
- 诠释了继承类之间构造器(有参、无参)、对象初始化块和静态初始化块之间的关系及调用顺序
- 继承与构造函数的调用
- C#继承与构造函数的调用
- java 关于继承中构造器和方法的调用
- 继承树的构造器调用顺序
- 关于继承构造器的调用
- 类与对象,类的构造方法和初始化块,private修饰符,this,继承与父类
- 进击的KFC:(三)继承、初始化方法、便利构造器
- C++杂记:继承与构造函数的调用
- C#构造函数的声明、重载与继承调用
- 类的继承 和 父类中构造方法的调用
- 初始化与构造器
- 子类继承和调用父类的构造方法
- 子类继承和调用父类的构造方法
- 子类继承和调用父类的构造方法
- 可以横向弹出的Button
- PHP操作MySQL,insert字符串 无法执行的问题
- CSS总结
- matlab笔记1:我用的图像命令
- CoaoaChina开发者小测验常识题
- 继承与初始化和构造器的调用
- 大数乘以整形数nyoj 155
- NGUI 拖拽丢弃实现
- PHP的curl实现get,post 和 cookie(几个实例)
- 一句话小计:initWithNibName
- Hadoop编程之MapReduce操作Mysql数据库
- 深入理解sizeof+C语言数据类型+内存补齐
- PHP 与 js 的交互
- 观察者设计模式( Observable类Observer接口)