-1

目前我会尝试理解java中的扩展类。

做了什么: 我为他创建了一个类和扩展类,在扩展类中我用简单的命令创建了构造函数——显示来自超类的变量。在另一个文件中,我尝试创建扩展类的对象,但出现错误 - “没有可访问 CObj 类型的封闭实例。必须使用 CObj 类型的封闭实例来限定分配(例如 xnew 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();
    }
}

问题; 做错了什么?为什么我有这个错误,我需要改变什么?或者,也许我正在以一种糟糕的方式做某事?

4

3 回答 3

4

鉴于您的错误信息:

“无法访问 CObj 类型的封闭实例。必须使用 CObj 类型的封闭实例来限定分配(例如,xnew 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);

您没有任何构造函数 in CObj,它需要 3 个整数参数。那也不会编译。

于 2013-08-11T09:50:46.950 回答
2

这似乎是您的问题之一:

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

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

于 2013-08-11T09:49:42.627 回答
2

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

CObj.Co n=new CObj.Co();

你可以写:

Co obj = new Co();

此外,您在基类 CObj 中没有 (int, int, int) 构造函数,因此类 Co 中的这一行是错误的:

super(1,2,3);

无论您是更改对现有 CObj(CObj object) 的调用还是编写一个 CObj(int a, int b, int c)

于 2013-08-11T09:53:39.937 回答