5

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

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);
....

错误 - 没有可访问类型 Inheritance 的封闭实例。我哪里错了?

4

6 回答 6

4

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

BoxWeight不需要在Inheritance课堂内。

相反,BoxWeightInheritance班级中删除。

并更改Inheritance.BoxWeightBoxWeight.

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

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

Inheritance.BoxWeight只是类型,所以上述不适用。但是要创建 的实例BoxWeight,您需要一个Inheritance对象,您可以使用new Inheritance().

于 2013-02-21T19:50:42.210 回答
3

改变

class BoxWeight extends Inheritance

static class BoxWeight extends Inheritance

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

于 2013-02-21T19:48:43.803 回答
1
Inheritance.BoxWeight mybox1 = new Inheritance().new BoxWeight(9, 9, 9, 9);

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

于 2013-02-21T20:10:09.037 回答
1

如果你想让你的类保持嵌套而不是静态的(我看不出有什么好的理由),你也可以使用:

Inheritance.BoxWeight mybox1 = new Inheritance().new BoxWeight(9, 9, 9, 9);
于 2013-02-21T19:52:24.363 回答
0

忽略这样一个事实,即这是一个带有疯狂名称的完全任意的作业问题,在抽象类中扩展一个类是一种奇怪的情况,并且 a 在 aBoxWeight中是没有意义的Inheritance

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

i是“封闭对象”。

于 2013-02-21T19:51:47.160 回答
-1

问题出在这一行

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

利用

BoxWeight mybox1 = new BoxWeight(9.0, 9.0, 9.0, 9.0);
于 2013-02-21T19:50:31.567 回答