質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

506閲覧

アクセス修飾子protectedについて

rokku

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2022/05/24 04:59

パッケージAに属するSuperクラス、パッケージBに属するSubクラスを作成しました。
Subクラスは、Superクラスを継承しています。
SubクラスからSuperクラスのフィールドにアクセスする時に、staticキーワードなしでは
アクセスできない理由がわかりません。
ご教授お願い致します。

java

1package A; 2 3public class Super { 4 protected static int a; 5}

java

1package B; 2 3import A.*; 4 5public class Sub extends Super{ 6 public void show(Super s) { 7 System.out.println(s.a); 8 } 9}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/05/24 05:22

> SubクラスからSuperクラスのフィールドにアクセスする時に、staticキーワードなしでは アクセスできない理由がわかりません。 これを行おうとしたときに出るエラーメッセージは確認しましたか?
rokku

2022/05/24 05:33

staticキーワードなしの時は、「フィールドSuper.aは不可視です」というエラーが表示されています。staticキーワードをつけた時は、アクセスすることができるようです。
guest

回答2

0

ベストアンサー

良い質問だなぁ・・・

結論いうと

java

1public void show(Super s) { 2 System.out.println(s.a); 3}

protectedのインスタンスフィールドは、super.a、this.aでアクセスする必要があります。
https://docs.oracle.com/javase/specs/jls/se18/html/jls-6.html#jls-6.6.2.1
super.aやthis.a、aというアクセスは可能です(自インスタスのメンバーへアクセ
スする)

要は、インスタンス名.aでアクセスできるものではありません

staticをつけることで、Super.aというアクセスが可能です。
※static変数にインスタンス名経由でアクセスするのは、お作法的に気持ち悪いですが可能です。

投稿2022/05/24 05:48

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rokku

2022/05/24 11:09 編集

protected修飾子ばかりに気を取られて、インスタンス変数を利用するときはインスタンス化する必要があることを 失念しておりました。 お答えいただき、ありがとうございます。
guest

0

staticを消して、

java

1 public void show() { 2 System.out.println(a); 3 }

ではどうでしょう

投稿2022/05/24 05:06

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/05/24 05:10

> SubクラスからSuperクラスのフィールドにアクセスする時に、staticキーワードなしでは アクセスできない理由がわかりません。
rokku

2022/05/24 05:24

Superクラスのフィールドaにstaticを付けた時と付けないときのアクセス可否についての質問をしたつもりでした。 私の説明不足で申し訳ありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問