继承初学者

时间:2013-02-21 19:46:51

标签: java inheritance

我刚刚开始学习java,所以现在我读到了继承这种可能性,所以尝试创建必须创建对象框的类。并使用继承实现新属性来创建对象。 我尝试将每个类放在单独的文件中,因此在创建类之后,尝试在

中使用它
public static void main(String[] args)

所以类继承:

 public class Inheritance {
double width;
double height;
double depth;
Inheritance (Inheritance object){
    width = object.width;
    height = object.height;
    depth = object.depth;
}
Inheritance ( double w, double h, double d){
    width = w;
    height = h;
    depth = d;
}
Inheritance (){
    width = -1;
    height = -1;
    depth = -1;
}
Inheritance (double len){
    width=height=depth=len;
}
double volumeBox (){
    return width*height*depth;
}
class BoxWeight extends Inheritance {
    double weight;
    BoxWeight (double w, double h, double d, double m){
        super(w,h,d);
        weight = m;
    }
}

但是,当我尝试在主类中使用BoxWeight时,在使用过程中我遇到了错误

public class MainModule {
    public static void main(String[] args) {
    Inheritance.BoxWeight mybox1 = new Inheritance.BoxWeight(9, 9, 9, 9);
....

错误 - 无法访问类型为继承的封闭实例。 哪里我错了?

6 个答案:

答案 0 :(得分:4)

就目前而言,BoxWeight需要Inheritance的实例才能工作(就像访问非静态变量或函数需要一个实例一样,因此访问非静态内部类也可以)。如果将其更改为static,则可以使用,但这不是必需的。

BoxWeight不需要在Inheritance类中。

相反,请从BoxWeight类中删除Inheritance

Inheritance.BoxWeight更改为BoxWeight

编辑:为了完整起见,你也可以做到:

Inheritance.BoxWeight mybox1 = new Inheritance().new BoxWeight(...);

Inheritance.BoxWeight只是类型,因此上述内容不适用。但要创建BoxWeight的实例,您需要使用Inheritance创建的new Inheritance()对象。

答案 1 :(得分:3)

更改

class BoxWeight extends Inheritance

static class BoxWeight extends Inheritance

这应该允许您的代码编译。但是,除了使用java的继承功能之外,您还使用了一个内部类,在这种情况下这不是必需的,并且可能会让您感到困惑。如果您将BoxWeight拉出到自己的文件中,并在没有Inheritance.前缀的情况下引用它,我认为您会发现更易于理解的内容。

答案 2 :(得分:1)

如果你想保持你的类嵌套而不是静态(我没有看到它的理由),你也可以使用:

Inheritance.BoxWeight mybox1 = new Inheritance().new BoxWeight(9, 9, 9, 9);

答案 3 :(得分:1)

Inheritance.BoxWeight mybox1 = new Inheritance().new BoxWeight(9, 9, 9, 9);

你在这里使用原则继承和内部类。假设您的班级BoxWeight未延伸Inheritance class。您的内部类可以访问外部类的一些属性和方法,这些属性和方法是对象实例级属性。所以你应该创建new Inheritance()然后使用这个实例创建一个BoxWeight的实例。

答案 4 :(得分:0)

忽略这一事实,这是一个完全随意的家庭作业问题,疯狂的名称,在抽象类中扩展一个类是一个奇怪的情况,BoxWeight在{{1}内是没有意义的}}:

Inheritance

... Inheritance i = new Inheritance(0, 0, 0, 0); Inheritance.BoxWeight mybox1 = i.new BoxWeight(9, 9, 9, 9); ... 是'封闭对象'。

答案 5 :(得分:-1)

问题出在这一行

Inheritance.BoxWeight mybox1 = new Inheritance.BoxWeight(9, 9, 9, 9);

使用

BoxWeight mybox1 = new BoxWeight(9.0, 9.0, 9.0, 9.0);