请问下面代码的输出结果
给点提示,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中继承能有更深一步的理解。