Java 从何从带有构造函数的类中派生出一个新类?(30分)

  • 主题发起人 主题发起人 mycwcgr
  • 开始时间 开始时间
M

mycwcgr

Unregistered / Unconfirmed
GUEST, unregistred user!
Java 从何从带有构造函数的类中派生出一个新类?
Untitled1类有一个构造函数,现定义Untitled1类的子类cc,但是系统出错(cannot resolve symbol: constructor Untiled1() in class a1.Untitled1 at line 3),请问是为什么?

package a1;
class Untitled1 {
String cw;
Untitled1(String cw) {
this.cw=cw;
}
}

package a1;
class cc extends Untitled1{
}
 
原因是这样的:
1.在没有定义constructor的情况下,每一个class都有一个default的不带参数的constructor.(不用你声明在类里) 但是一旦用户自定义了一个带参数的constructor,那么原先default的constructor就不存在了。
你可以做一个实验
public class A {
public static void main(String[] args)
{
A a = new A()
}
}
是可以编译成功并运行的。
但如果换了
public class A {
public A(int i) {
System.out.print("A");
}
public static void main(String[] args)
{
A a = new A()
}
}
就无法编译通过了。
2. 如果B是A的子类,本质上说B在构造的时候一个A的对象同时被实例化,作为B的一个“成员对象”,如果A这时候是无参的或者是缺省的constructor,就不需要显示构造A, 但如果A只有一个有参数的constructor,那么A就肯定无法构造成功,于是以编译错误的形式告诉你。
因此解决方法有二:
一,修改你的cc的constructor
class cc extends Untitled1{
public cc(){
super("hello");
// 用super来显示调用cc父类的constructor
}
}
二,给Untitled1增加一个不带参数的constructor
具体使用哪种办法取决于实际需要。
另外说一点,给类命名通常开头字母大写,对象变量则用小写,这样程序的可读性会比较高。


}
 
接受答案了.
 

Similar threads

后退
顶部