java implicit super constructor sort() is undefined.
来源:百度知道 编辑:UC知道 时间:2024/05/30 13:26:56
子类继承了父类,怎么写第二个构造器,就会出错?
public class Test {
int i;
public Test(int i){
this.i=i;
}
}
class TestA extends Test{
public TestA(){
}
public TestA(int i,int j){
}
public TestA(int i){
super(i);
}
}
class TestB extends Test{
public TestB(){
}
}
//父类中为什么要保留个默认的构造器,这样子类才能添加新的构造器,不保留,为什么子类要写个跟父类一样的构造器,里面还要调用父类的构造器??
public class Test {
int i;
public Test(int i){
this.i=i;
}
}
class TestA extends Test{
public TestA(){
}
public TestA(int i,int j){
}
public TestA(int i){
super(i);
}
}
class TestB extends Test{
public TestB(){
}
}
//父类中为什么要保留个默认的构造器,这样子类才能添加新的构造器,不保留,为什么子类要写个跟父类一样的构造器,里面还要调用父类的构造器??
没有父类怎么构造子类啊,构造子类之前是必须要先构造父类的,一般都是隐式调用父类的无参构造器的,所以:
1.如果定义了有参构造器,而又没有无参构造器的话,JVM是不会自己构造无参构造器的,因为虚拟机认为你自己可以定义构造器(java虚拟机说:自己能做为什么还要我帮你定义无参构造器呢)
2.如果没有定义了有参构造器,就可以不用自己定义无参构造器(java虚拟机说:你不会定义构造器啊,那我帮你造个吧)
因为你类中显式的声明了一个构造器,所以默认的构造器就不存在了,但是你在子类的构造器中并没有显式的调用父类的构造器(创建子类对象的时候,一定会去调用父类的构造器,这个不用问为什么),你没有显式调用的话,虚拟机就会默认调用父类的默认构造器,但是此时你的父类的默认构造器已经不存在了,这也就是为什么父类中必须保留默认构造器的原因。
PS.应该养成良好的编程习惯,任何我们自己定义的类,都显式的加上默认的构造器,以后更深入的学习之后,会发现有很多好处。
因为如果不保留默认的构造器,子类中会缺省的调用super(),而有了构造器,java会取消默认的构造器,这样就会出错,当然可以不保留默认的构造器,但这样所有子类都要显式调用super(5)这类的其他构造器,很不方便,所以保留默认的构造器是明智的。
什么是implicit tax和 explicit tax?
what's reflection in java
How can you prevent implicit type conversion using constructors?
怎么搞JAVA C/S模式的系统?
what's wrong with my java program?
JAVA里什么是C/S模式什么是B/S模式?
JAVA开发 C/S结构和B/S结构,哪一种比较有发展!
翻译Given their implicit theories about the effects of initiation and consideration
我是学java的,如果要往C/S或B/S发展一定要学JSP吗?
???JAVA???