Java中的扩展类

时间:2013-08-11 09:48:12

标签: java class

目前我将尝试了解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();
    }
}

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

3 个答案:

答案 0 :(得分:4)

给出您的错误消息:

  

“不能访问类型为CObj的封闭实例。必须使用CObj类型的封闭实例限定分配(例如x.new A(),其中x是CObj的实例)。”

它表示CoCObj的内部类,而不是嵌套(静态内部)类。因此,您只能使用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)