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で質問しましょう!
似たような質問が見つかりました
- Java java final 1 2022/06/10 22:49
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#にて別クラスの関数を使いたい
-
無名パッケージからのインポート
-
関数内の変数に<summary>コメン...
-
実行可能jarファイルのファイル...
-
ひとつのファイルにクラスは1つ?
-
[C#] OpenFileDialogによって得...
-
構造 他のクラスの構造体を別...
-
C# インターフェイスの実装
-
c++,ある関数のクラスから別の...
-
a href="..." とServlet
-
import と extends について
-
Eclipseを用いたJARファイル作...
-
クラス間でのデータ参照
-
C++で親クラスの関数を呼び出す...
-
内部クラスのスコープについて。
-
スーパークラスのインスタンス...
-
C#でほかのファイルにある自作...
-
スーパークラスのコンストラク...
-
Java リフレクションについて
-
C#のクラスライブラリでメッセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
クラス間でのデータ参照
-
C#にて別クラスの関数を使いたい
-
構造 他のクラスの構造体を別...
-
c++,ある関数のクラスから別の...
-
C#のクラスライブラリでメッセ...
-
C++でfriendクラスにしているの...
-
ひとつのファイルにクラスは1つ?
-
Java リフレクションについて
-
C#でほかのファイルにある自作...
-
範囲外の数値を代入したらエラ...
-
無名パッケージからのインポート
-
java-別クラスの変数の使い方を...
-
import と extends について
-
C# インターフェイスの実装
-
親クラスから子クラスへアクセス。
-
a href="..." とServlet
-
継承したクラス側のクラス名の取得
-
Java
-
JSPでbeanプロパティ(配列)を...
おすすめ情報