今天在TSS上又看到有人讨论java多继承的问题,是想起这个话题的原因。^_^
java中任何类都默认继承 Java.lang.Object,除非被另一个继承覆盖(override),hoho 俺一直这么称呼override的,感觉更加贴切一些。
请看以下代码:
package org.myth.test;
public class SuperSon{
SuperSon(){
System.out.println("this is super son");
}
}
对于编译器来说,这段代码会被首先补全为:
package org.myth.test;
public class SuperSon extends Object{
SuperSon(){
System.out.println("this is super son");
}
}
对待任何一个类,编译器会去检查extends关键字,如果没有,编译器会默认添加extens Object
extends Object就是一段默认隐藏的代码,同样在Constructor中,也有一段默认隐藏的代码。
package org.myth.test;
public class SuperSon extends Object{
SuperSon(){
super();//这就是一段默认隐藏代码
System.out.println("this is super son");
}
//整个构造方法也是一段默认隐藏代码
}
如同编译类时编译器回去检查extends关键字一样,编译器会首先检查是否存在constructor,如果没有,默认增加ClassName()构造方法。
在构造方法内部,编译器会检查第一行代码是否为super构造方法,如果不是,默认添加super()
这个就是为什么 new一个对象的时候,首先调用的是父类的构造方法。
一个错误代码示例:
package org.myth.test;
public class SuperMan {
SuperMan(String s){
System.out.println("this is super man");
}
}
package org.myth.test;
public class SuperSon extends SuperMan{
SuperSon(){
System.out.println("this is super son");
}
}
阅读(2040) | 评论(0) | 转发(0) |