java解惑
2017-04-13 00:00
148 查看
java解惑
子类的构造函数问题
public class Constructor {
public static void main(String[] args) {
new foo3();
new foo3("Aloha");
}
}
子类的构造函数问题
public class Constructor {
public static void main(String[] args) {
new foo3();
new foo3("Aloha");
}
}
class foo{ foo(){System.out.println("foo...");} foo(String s){System.out.println("foo..."+s);} } class foo1 extends foo{ foo1(){System.out.println("foo1...");} foo1(String s){System.out.println("foo1..."+s);} } class foo2 extends foo1{ foo2(){System.out.println("foo2...");} foo2(String s){System.out.println("foo2..."+s);} } class foo3 extends foo2{ foo3() {System.out.println("foo3...");} foo3(String s){System.out.println("foo3..."+s);} }
运行结果:
foo... foo1... foo2... foo3... foo... foo1... foo2... foo3...Aloha
解释: 当子类创建新对象时首先调用父类的无参构造方法。 new foo3();构造方法调用顺序为foo()-->foo1()-->foo2()-->foo3(); new foo3("Aloha");构造方法调用顺序为foo()-->foo1()-->foo2()-->foo3("Aloha"); 我的理解:构造方法中的隐藏了super();方法在自己的构造方法体中(即隐式调用父类无参构造方法),如下 foo3(String s){ super(); //显式调用 System.out.println("foo3..."+s); } 即子类构造方法默认调用父类的无参构造方法。 Attention: 如果显式调用父类的构造方法必须将父类构造方法放在子类构造方法句首,不能像这样: foo3(String s){ System.out.println("foo3..."+s); super(s); //编译将会无法通过 }
相关文章推荐
- 关于Java String对象创建问题解惑
- java解惑:Class.forName(String driverClassName)载入JDBC驱动程序的幕后。
- JAVA面试题解惑系列(六)――字符串(String)杂谈
- JAVA面试题解惑系列(二)——到底创建了几个String对象?
- JAVA面试题解惑系列(七)――日期和时间的处理
- JAVA面试题解惑系列(二)——到底创建了几个String对象?
- JAVA解惑---String创建了几个对象
- JAVA面试题解惑系列(五)——传了值还是传了引用?
- JAVA面试题解惑系列(三)——变量(属性)的覆盖
- java解惑:揭开Struts MVC Model2的面纱。
- JAVA面试题解惑系列(一)――类的初始化顺序
- JAVA面试题解惑系列(三)――变量(属性)的覆盖
- JAVA面试题解惑系列(五)――传了值还是传了引用?
- JAVA面试题解惑系列(一)——类的初始化顺序
- JAVA解惑-字符串(-)
- java字符串解惑
- 关于 Java解惑 里的一些问题
- JAVA面试题解惑系列(一)——类的初始化顺序
- JAVA面试题解惑系列(四)——final、finally和finalize的区别
- 转载:JAVA面试题解惑系列(一)——类的初始化顺序