[英]Extended Classes in Java
目前,我将尝试了解Java中的扩展类。
做了什么:我为他创建了一个类并扩展了类,在扩展类中,我使用简单的命令创建了构造函数-显示超类中的变量。 在另一个文件中,我尝试创建扩展类的对象,但出现错误-“ 无法访问类型为CObj的封闭实例。必须使用类型为CObj的封闭实例来限定分配(例如xxnew 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();
}
}
题; 做错了什么? 为什么我有此错误,我需要更改什么? 还是我做事不好?
鉴于您的错误消息:
“无法访问类型为CObj的封闭实例。必须使用类型为CObj的封闭实例来限定分配(例如xxnew A(),其中x是CObj的实例)。”
它说Co
是CObj
的内部类,而不是嵌套的(静态内部)类。 因此,您只能使用CObj
的实例访问Co
:
Cobj.Co obj = new CObj().new Co();
但是,您应该真正确定在创建它时需要一个内部类。 另外,正如@JBNizet所建议的那样,您应该将每个类放在自己的文件中。 这将使您更容易理解类之间的交互方式。 然后,您可以使用以下命令轻松创建Co
对象:
Co obj = new Co();
其次,您尝试从Co
调用超类构造函数,该构造函数不存在:
super(1,2,3);
您在CObj
没有任何构造函数,该构造函数需要3个整数参数。 那也不会编译。
这似乎是您的问题之一:
Co(){
super(1,2,3);
}
您的超类中没有这样的构造函数。
您的语法在这里是错误的:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.