请问这里为什么一定要实现
A()构造函数啊??
package Reuse;class A{String sa;// A(){
// System.out.println("A()");
// }A(String s){
this.sa = s;
System.out.println("A(s)");
}
}class B{
String sb;B(){
System.out.println("B()");
}B(String s){
sb = s;
System.out.println("B(s)");
}
}public class C extends A{B b;C(B b){
this.b = b;
System.out.println("C(b)");
}public static void main(String[] args){
B b =new B();
C c =new C(b);
}}
A()构造函数啊??
package Reuse;class A{String sa;// A(){
// System.out.println("A()");
// }A(String s){
this.sa = s;
System.out.println("A(s)");
}
}class B{
String sb;B(){
System.out.println("B()");
}B(String s){
sb = s;
System.out.println("B(s)");
}
}public class C extends A{B b;C(B b){
this.b = b;
System.out.println("C(b)");
}public static void main(String[] args){
B b =new B();
C c =new C(b);
}}
}
为什么这样不行?
所以你可以写一个父类A的无参构造函数,或者在子类C的构造函数第一行显性调用父类构造函数的某个重载
比如说super("");
所以A类中只有一个参数是String的构造函数。子类在初始化时,如果不显示的调用父类的构造函数,那么默认掉用父类的默认构造函数。
父类A中没有默认构造函数,所以发生编译错误。Good Luck.
// System.out.println("A()");
// } A(String s) {
this.sa = s;
System.out.println("A(s)");
}
A(B b){
}
}class B {
String sb; B() {
System.out.println("B()");
} B(String s) {
sb = s;
System.out.println("B(s)");
}
}public class C extends A { B b; C(B b) {
super(b);
this.b = b;
System.out.println("C(b)");
} public static void main(String[] args) {
B b = new B();
C c = new C(b);
}}
这样就好了。
1,如果一个类里面没有构造函数,则系统会说:“既然没有构造函数,那我就来造一人吧”,所以会有一个默认的构造函数,如果开发者自己在类中写了一个构造函数,则系统会说:“既然你已经有构造函数了,那就不需要我造一个函数了。”所以就不会有默认的构造函数。
2,子类在初始化的时候,先调用父类的构造函数,再调用子类自己的构造函数。你的问题就出在这里,子类的构造函数里没有默认的构造函数可以调用 ,也没有在子类中显示的调用某个函数,比如super("");所以编译出错。
3,初学者不要看这么复杂的代码。掌握知识点,要用简单的示例,你那个例子搞七搞八的,不怎么好讲知识点。呵呵。