class Shape{ void printk(){ System.out.println("I am Shape"); } Shape(){ System.out.println(""); System.out.println("--base--"); printk(); } } class Circle extends Shape { Circle(){ System.out.println(""); System.out.println("--extends--"); printk(); } } class Square extends Shape{ void printk(){ System.out.println("I am Square"); } Square(){ System.out.println(""); System.out.println("--extends--"); printk(); } } public class E701{ Circle ss = new Circle(); public static void main(String[] args){ System.out.println("main"); Circle cc = new Circle(); Square squa = new Square(); } }
运行结果如下所示:
分析:
1. 当执行 java E701时,首先执行static main函数,此时打印“main”;
2. 接着通过new 构造一个Circle对象cc,Circle继承自父类Shape,所以先去构造父类Shape;
3. 构造父类Shape,执行构造函数,打印---base--- / I am Shape;
4. 接着构造继承类Circle,打印---extends--- / I am Shape;
5. 接着new 一个 Square对象,Square继承自Shape,先去构造父类;
6. Shape构造函数被调用,先打印---base---,由于Square已经重载了父类的prink函数,所以这里调用的printk是
Square的printk,因而打印 I am Square
7. 父类构造完毕再构造Square,打印---extends--- / I am Square