public
別クラスからアクセス可能
class Human{
//別クラスからアクセス可能
public int age;
}
class Main {
public static void main(String[] args){
Human yamada = new Human();
yamada.age = 10;
System.out.print("山田さんは" + yamada.age + "歳です");
}
}
//結果:山田さんは10歳です
private
同一クラスのみアクセス可能
成功例
class Human{
//同一クラスのみアクセス可能
private int age;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
}
class Main {
public static void main(String[] args){
Human yamada = new Human();
yamada.setAge(10);
System.out.print("山田さんは" + yamada.getAge() + "歳です");
}
}
//結果:山田さんは10歳です
失敗例
class Human{
//同一クラスのみアクセス可能
private int age;
}
class Main {
public static void main(String[] args){
Human yamada = new Human();
//↓別クラスのためアクセスできない
yamada.age = 10;
// ↓別クラスのためアクセスできない
System.out.print("山田さんは" + yamada.age + "歳です");
}
}
//結果:Main.java:9: error: age has private access in Human
protected
継承先からアクセス可能
成功例
class Human{
//継承先からアクセス可能
protected String name;
}
class Teacher extends Human{
public void Greeting(String name){
super.name = name;
System.out.print("私の名前は" + super.name + "です");
}
}
class Main {
public static void main(String[] args){
Teacher yamada = new Teacher();
yamada.Greeting("山田");
}
}
//結果:山田さんは10歳です
失敗例
class Human{
//継承先からアクセス不可能
private String name;
}
class Teacher extends Human{
public void Greeting(String name){
//↓privateのためアクセスできない
super.name = name;
// ↓privateのためアクセスできない
System.out.print("私の名前は" + super.name + "です");
}
}
class Main {
public static void main(String[] args){
Teacher yamada = new Teacher();
yamada.Greeting("山田");
}
}
//結果:Main.java:11: error: name has private access in Human
// Main.java:12: error: name has private access in Human
まとめ
public:別クラスからアクセス可能
private:同一クラスのみアクセス可能
protected:継承先へアクセス可能
| 同一クラス | 別クラス | 継承元 | |
|---|---|---|---|
| public | 〇 | 〇 | T〇 |
| private | 〇 | × | × |
| protected | 〇 | × | 〇 |