5

私はJavaを学び始めたばかりなので、継承などの可能性について読んだので、object-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);
....

エラー-継承タイプの囲んでいるインスタンスにアクセスできません。どこが間違っているの?

4

6 に答える 6

4

現状でBoxWeightは、のインスタンスがInheritance機能する必要があります(非静的変数または関数にアクセスするにはインスタンスが必要であるため、非静的内部クラスにアクセスする場合も同様です)。これに変更するとstatic機能しますが、これは必須ではありません。

BoxWeightInheritanceクラス内にいる必要はありません。

代わりに、クラスから削除BoxWeightしてください。Inheritance

そしてに変更Inheritance.BoxWeightBoxWeightます。

編集:完全を期すために、次のようにすることもできます。

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

Inheritance.BoxWeightはタイプだけなので、上記は当てはまりません。ただし、のインスタンスを作成するには、で作成するオブジェクトBoxWeightが必要です。Inheritancenew 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

これがクレイジーな名前の完全に恣意的な宿題の問題であるという事実を無視すると、抽象クラス内でクラスを拡張することは奇妙な状況であり、 :BoxWeight内にあることは意味がありません。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 に答える