
protectedの場合、自分のクラスか継承されたクラスへのアクセスしかできないと思い、エラーが出るプログラムを書いたつもりでしたが、コンパイルし、実行結果も123が表示されました。
予想では、private, protectedがエラーで、デフォルト、publicだとうまくいくとおもっていましたが、protectedでアクセスできた理由がわかりません。
どなたか、おしえていただけますでしょうか?
なお、JDKは1.8.0_77です。
<実行結果>
E:>javac test.java
E:>java test
123
<プログラム>
class abc{
protected int a = 123;
}
class test{
public static void main(String[] str){
abc o = new abc();
System.out.println(o.a);
}
}
No.1ベストアンサー
- 回答日時:
protectedは、クラス内、継承されたクラス内以外にも、同一パッケージ内からのアクセスも可能です。
質問文のプログラムでは、abcクラスもtestクラスも同一パッケージ(パッケージ無し)ですので、エラーとなりません。もし、protectedでクラス外からアクセスしようとしてエラーになることを確認したい場合は以下のようにする必要があります。
<ソースファイル a¥abc.java>
package a;
class abc{
protected int a = 123;
}
<ソースファイル b¥test.java>
package b;
import a.*;
class test{
public static void main(String[] str){
abc o = new abc();
System.out.println(o.a);
}
}
<コンパイル方法>
javac a¥abc.java
javac b¥test.java
上記の2行目のjavacの実行時にprotectedのためにエラーとなります。
teideさん、早速の回答ありがとうございます。
パッケージについて理解でき、結果についても納得しました。
今読んでいる本で、80ページ後に解説がありました。
No.3
- 回答日時:
Javaの仕様通り。
同一パッケージ内では実装詳細にアクセスできた方が
何かと便利だからです。
C++のfriendより楽。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
a href="..." とServlet
-
Java リフレクションについて
-
無名パッケージからのインポート
-
C#にて別クラスの関数を使いたい
-
(クラス名.this.メソッド)って...
-
クラス間でのデータ参照
-
C#のクラスライブラリでメッセ...
-
継承したクラス側のクラス名の取得
-
c++,ある関数のクラスから別の...
-
関数内の変数に<summary>コメン...
-
ネストしたenumへのリフレクシ...
-
C++でfriendクラスにしているの...
-
ASP Pageの孫継承のPage_Load
-
構造 他のクラスの構造体を別...
-
【ASP.NET MVC3】共通ビュークラス
-
C# 定数定義
-
C++ シングルトン マルチスレッド
-
リフレクション
-
java-別クラスの変数の使い方を...
-
FilterReader クラスのカスタム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
関数内の変数に<summary>コメン...
-
javaでメインクラスが見つから...
-
範囲外の数値を代入したらエラ...
-
C#にて別クラスの関数を使いたい
-
a href="..." とServlet
-
無名パッケージからのインポート
-
visual studioのデザイナ画面で...
-
import と extends について
-
Java リフレクションについて
-
C#のクラスライブラリでメッセ...
-
C# インターフェイスの実装
-
親クラスから子クラスへアクセス。
-
c++,ある関数のクラスから別の...
-
Java
-
構造 他のクラスの構造体を別...
-
C++で親クラスの関数を呼び出す...
-
C++でfriendクラスにしているの...
-
java-別クラスの変数の使い方を...
-
下記のコードを実行すると、Mai...
おすすめ情報