繁体   English   中英

Java扩展类

[英]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的实例)。”

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM