目前我将尝试了解java中的扩展类。
做了什么: 我为他创建了一个类和extende类,在扩展类中我使用简单命令创建构造函数 - 显示来自超类的变量。 在另一个文件中我尝试创建扩展类的对象,但我有错误 - “不能访问类型为CObj的封闭实例。必须使用CObj类型的封闭实例限定分配(例如x.new A(),其中x是CObj的实例)。”
代码:主文件
public class Demo {
public static void main (String[] args){
CObj.Co n=new CObj.Co();
n.show();
}
}
和带有课程的文件
class CObj {
int i,k,l;
CObj summ (CObj object){
object.i*=i;
object.k*=k;
object.l*=l;
return object;
}
void show (){
System.out.println("this is super class");
System.out.println(i+" "+k+" "+l);
}
......很少有构造函数......和扩展类
class Co extends CObj{
Co(){
super(1,2,3);
}
void show(){
System.out.println("this is extended class and overloaded meth");
super.show();
}
}
问题;做错了什么?为什么我有这个错误,我需要改变什么?或者也许我正在做一些糟糕的事情?
答案 0 :(得分:4)
给出您的错误消息:
“不能访问类型为CObj的封闭实例。必须使用CObj类型的封闭实例限定分配(例如x.new A(),其中x是CObj的实例)。”
它表示Co
是CObj
的内部类,而不是嵌套(静态内部)类。因此,您只能使用Co
:
CObj
Cobj.Co obj = new CObj().new Co();
但是,你应该确定你需要一个内部类,同时创建它。另外,正如@JBNizet建议的那样,你应该将每个类放在它自己的文件中。这将使您更容易理解类如何交互。然后,您可以使用以下方法轻松创建Co
对象:
Co obj = new Co();
其次,你试图从Co
调用超类构造函数,它不存在:
super(1,2,3);
CObj
中没有任何构造函数,它有3个整数参数。那不会'编译。
答案 1 :(得分:2)
这似乎是你的一个问题:
Co(){
super(1,2,3);
}
你的超类中没有这样的构造函数。
答案 2 :(得分:2)
这里的语法错误:
CObj.Co n=new CObj.Co();
你可以写:
Co obj = new Co();
另外,你在基类CObj中没有(int,int,int)构造函数, 因此,Co类中的这一行是错误的:
super(1,2,3);
是否更改对现有CObj(CObj对象)的调用,或者编写CObj(int a,int b,int c)