Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

別パッケージ変数へのアクセス

下記のように別パッケージのprotected変数にアクセスし
ようとするとコンパイルエラーとなります。どのように
したらアクセスできますでしょうか。

どうかご教授ください。

-----------------------------------
package packA;
public class A {
    protected int x;
    public int y;
}

-------
package packB;
import packA.A;

public class B extends A {
    public static void main(String[] args){

        // ここでxにアクセスしたい

        A obj = new A();
        System.out.println(obj.y);
    }
}

11

回答

6764

閲覧

11件の回答

評価

0

protectedがなにを意味するのか勉強しましょう。

評価

0

いつもありがとうございます。

「protected は同じパッケージ内すべてからと、他のパッケージのものでも、そのクラスのサブクラスからならアクセスを許す」

と参考書にあり、AのサブクラスであるBクラスであればxにアクセスできると思うのですがどこか勘違いしているのでしょうか。

評価

0

をを、失礼をば。勉強させていただきました。m(_ _)m

この場合、注目すべきはstaticの方だね。

評価

0

staticに注目とは、

protected int x; ⇒ static protected int x;
ということでしょうか。

上記のprotected定義に従い、
B objB = new B();
System.out.println(objB.x);
としたところコンパイルできました。


A obj = new A();
System.out.println(obj.x);
の場合は、「他パッケージでそのクラスのサブクラス」
ではなく、「他パッケージでそのスーパークラス」だか
らコンパイルエラーとなるのでしょうか。

評価

0

細かい解説はしません。
教科書に載ってることですから。
なんでいちいちnewするのか、理解してますか?

逆に、xをstaticにしなくても、以下のようにしても動きます。

-----------------------------------
package packA;
public class A {
    protected int x;
    public int y;
}

-------
package packB;
import packA.A;

public class B extends A {
    public static void main(String[] args){

        A obj = new A();
        // ここならxにアクセスできる
        System.out.println(obj.x);
        System.out.println(obj.y);
    }
}

評価

0

>逆に、xをstaticにしなくても、以下のようにしても動きます。

「以下のように・・・」で動かないのですが、

// ここならxにアクセスできる
を自分で調べて処理を追加してみなさいということですか?


評価

0

たびたびのご指摘恐縮します。m(_ _;m

public class B extends A {
    public static void main(String[] args){

        // ここを変更してくださいな。
        B obj = new B();
        // ここならxにアクセスできる
        System.out.println(obj.x);
        System.out.println(obj.y);
    }
}

評価

0

あれ、こういうことじゃないの?
-----------------------------------
package packA;
public class A {
    protected int x;
    public int y;
}

-------
package packB;
import packA.A;

public class B extends A {
    public static void main(String[] args){

        B obj = new B();
        // ここならxにアクセスできる
        System.out.println(obj.x);
        System.out.println(obj.y);
    }
}
-----------------------------------
結局は「継承」に落ち着く。


前にもこんな記事がありましたヨ
http://www.javaroad.jp/bbs/answer.jsp?q_id=2008122117154333

評価

0

うぼぁダブった。
失礼仕ったorz

評価

0

無事解決することができました。
どうもありがとうございました。m(_ _)m

評価

0

とんでもない。勉強させていただいています。ノシ

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。