Java继承,创建对象初始化顺序

来源:互联网 发布:淘宝蛋刀必出bug 编辑:程序博客网 时间:2024/04/30 09:57

请问下面代码的输出结果

给点提示,Java中每次new 一个对象,其实就做两件事 一、是分配存储空间(也可以理解为创建)。二、初始化

具体的步骤如下

1、先在堆内存中开辟空间,空间的大小取决与属性的类型和属性的个数(包括继承父亲的属性)。

2、成员变量初始化(如果成员变量没赋值,则为默认值)

3、构造方法初始化

其中2、3两步是从基类依次到达儿子重复的做。

请先用手动得出结果,然后再用工具运行一下,看一下结果是否跟你预想的一样

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 {  Bread b = new Bread();  Cheese c = new Cheese();  Lettuce l = new Lettuce();  Sandwich() {     System.out.println("Sandwich()");  }  public static void main(String[] args) {    new Sandwich();  }}
接着,再来看下面的一段很有趣代码,同样的先想一下结果是什么,在运行

class Glyph {   void draw(){}   Glyph() {    System.out.println("Glyph() before draw()");    draw();     System.out.println("Glyph() after draw()");  }}class RoundGlyph extends Glyph {  int radius = 2222;  RoundGlyph(int r) {    radius = r;    System.out.println("RoundGlyph.RoundGlyph(), radius = "+ radius);  }  void draw() {     System.out.println("RoundGlyph.draw(), radius = " + radius);  }}public class PolyConstructors {  public static void main(String[] args) {    new RoundGlyph(5);  }}
通过上面的例子希望能够让你们对Java中继承能有更深一步的理解。