我刚刚开始学习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);
....
错误 - 无法访问类型为继承的封闭实例。 哪里我错了?
答案 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);