-2

私はまだJavaの初心者です。私の質問は本当に基本的なものかもしれません。

私はクラスのスーパークラスのボックスを持っています,

package chapter8;

public class Box {

    double width;
    private double height;
    private double depth;

    Box(double w, double h, double d) {
        width = w;
        height = h;
        depth = d;
    }

    double volume() {
        return width * height * depth;
    }
}

BoxWeight は Box スーパークラスのサブクラスです。

package chapter8;

public class BoxWeight extends Box {

    double weight;

    BoxWeight(double w, double h, double d, double m){
        super(w, h, d);
        weight = m;
    }
}

今、私はDemoBoxWeightにメインを持っています

package chapter8;

public class DemoBoxWeight {

    public static void main(String[] args) {

        BoxWeight myBox1 = new BoxWeight(2, 3, 4, 5);

        System.out.println("Volume1 :" + myBox1.volume());
        System.out.println("Weight1 :" + myBox1.weight);
        System.out.println("Widht1: " + myBox1.width);
        System.out.println("Depth1: " + myBox1.depth); // as depth is private, it is not accessible
    }
}

高さと深さはプライベートとして定義されているため、これらの変数の値を実際に渡す DemoBoxWeight はアクセスできません。Private を default/public に変更できることはわかっていますが、値を渡すクラスが実際にアクセスできるようにする別の方法もありますか?

PS:私は新しいので、私の用語は間違っている可能性があり、私の質問は本当にばかげています

4

5 に答える 5

5

これを行う通常の方法は、次のように getter と setter を記述することです。

public double getHeight()
{
    return this.height;
}

public void setHeight(double height)
{
    this.height = height;
}

クラス外から値を変更したくない場合は、セッターを削除できます。

于 2013-04-28T17:36:38.590 に答える
1

基本的に、クラス プロパティへのアクセス メソッドを提供する必要があります。

2 つのアクセス方法がありますgetters。これらは、 Java Bean の定義settersに従って、クラスへの読み取り/書き込みアクセスを提供する標準的な方法です。

于 2013-04-28T17:37:43.447 に答える
1

カプセル化に関するドキュメントは次のとおりです(これはあなたが扱っているものです): http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

于 2013-04-28T17:38:57.307 に答える
0

非公開を保護に変更します。

protected 修飾子を使用すると、クラス階層内のすべてのサブクラスが、getter または setter メソッドを使用しなくてもインスタンス変数にアクセスできます。

他のクラス (クラス階層の外側にある) がアクセスすることは引き続き拒否されるため、カプセル化は引き続き考慮されます。

于 2014-09-30T09:46:17.737 に答える
0

これは主に、いわゆる を作成することによって行われgettersます。

public int getHeight(){
  return this.height;
}

アイデアは、(公開する代わりに)将来ボックスの内部表現を変更したいときはいつでも、高さに応じてユーザーを邪魔することなくこれを行うことができるということです.

例:

深さの代わりに対角線を保存したいとしましょう。または、float やその他の数値型を使用することもできます。

getHeight次のように見えるかもしれません:

public int getHeight(){
  return diagonalstoHeight(diagonal1, height, width);
}

そして、誰も今までそうしません。encapsulationとについても読む必要があります。information hiding

于 2013-04-28T17:41:05.243 に答える