Java中的扩展类

Java中的扩展类,java,class,Java,Class,目前,我将尝试理解java中的扩展类 做了什么: 我为他创建了一个类和extende类,在extended类中,我使用简单的命令创建构造函数-显示来自超类的变量。 在另一个文件中,我尝试创建扩展类的对象,但出现错误- “无法访问CObj类型的封闭实例。必须使用CObj类型的封闭实例限定分配(例如,x.new A(),其中x是CObj的实例)。” 代码:主文件 public class Demo { public static void main (String[] args){

目前,我将尝试理解java中的扩展类

做了什么: 我为他创建了一个类和extende类,在extended类中,我使用简单的命令创建构造函数-显示来自超类的变量。 在另一个文件中,我尝试创建扩展类的对象,但出现错误- “无法访问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);
   }
。。。很少有构造器。。。和考试班


问题,;做错了什么?为什么我会有这个错误,我需要改变什么?或者我做的事情不好?

这似乎是你的问题之一:

  Co(){
        super(1,2,3);
    }

您的超类中没有这样的构造函数。

给出错误消息:

“无法访问CObj类型的封闭实例。必须使用CObj类型的封闭实例限定分配(例如,x.new 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个整数参数。这也不会编译。

您的语法在这里是错误的:

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)

在自己的文件中定义每个类,直到您了解内部类是什么。看起来您可能已经在
CObj
内部定义了
Co
。那不是你想要的。把它放在它自己的文件里,每个类有2个文件——一个是超类和扩展类的文件,一个是main方法类的文件,main方法生成3个类的2个文件。您应该有3个文件:一个用于主类,另一个用于CObj类,第三个用于Co类。事实上,由于错误消息,我怀疑它实际上是一个内部类,但不应该是。我有构造函数:只需从post中删除它们:我下面的所有构造函数:`CObj(){i=0;k=0;l=0;}CObj(intx){i=x;k=0;l=0;}CObj(intx,inty){i=x;k=y;l=0;}CObj(intx,inty,intz){i=x;k=y;l=z;}CObj(CObj对象){i=object.i;k=object.k;l=object.l;}`@kirill删除不必要的代码总是一件好事,但要确保代码是自我完成的好,下次我会把所有需要的代码放在一起,以便更好地理解当前的问题,谢谢
super(1,2,3);