就一个知识点:当创建子类对象时,先调用父类的构造函数,再调用子类的构造函数作者: 【专】【属】 时间: 2012-2-20 14:49
同意上楼的。作者: 王康 时间: 2012-2-20 14:55
我认为打印的是
A
B
A
因为
A a = new B(); //首先会调用父类A中的构造函数打印A,然后调用子类B的构造函数打印B
a = new A(); //实际上是等同与 A a = new A(); //打印出来的是父类A的构造函数A作者: 温昌寿 时间: 2012-2-20 22:05
A
B
A
因为创建B的时候因为是继承A所以会查找父类的构造函数,所以输出A然后再查找自己的构造函数
你试下改成下面这样,然后发现输出的会是CAB
package com.isoftstone.interview.traffic;
class C
{
public C(){
System.out.println("C");
}
}
class A extends C{
public static void print(){
System.out.println("A");
}
public A(){
System.out.println("A");
}
}
public class B extends A{
public static void print(){
System.out.println("B");
}
public B(){
System.out.println("B");
}
public static void main(String[] args){
A a=new B();
}
}作者: 李晓俊老师 时间: 2012-2-20 22:56
关键知识点是:
在子类构造函数的第一个语句,隐式地调用了父类的空参构造函数,,即有一个super();语句
然后你知道了作者: 钟成军 时间: 2012-5-28 23:03
这是用多态的应用,在主函数中A a=new B();这个语句中,先要调用A类中的构造函数,所以首先输出A,再调查用B类中的构造函数,所以再输出B,而a=new A();这个语句就是简单的建立一个A对象,所以调用A的构造函数,即输出A,所以最终打印结果为
A
B
A作者: 陌花╮有意、 时间: 2012-5-31 12:17
A
B //A a=new B(); 先调用父类构造方法(隐式调用无参的),再调用子类构造方法
A //a=new A();调用父类构造方法