Javaアクセス許可-パワーノード

Javaクラスのアクセス許可

Javaクラスのアクセス許可には2つのタイプがあります。

パブリックおよび非パブリック

publicで変更されたクラスはパブリッククラスであり、publicで変更されていないクラスは非パブリッククラスです。

パブリッククラスのアプリケーションシナリオ

このクラスを他のパッケージで使用する場合は、パブリッククラスとして定義します

非公開クラスは、現在のパッケージでのみ使用できます

Javaクラスメンバーのアクセス許可

アクセス許可

現在のクラス

現在のパッケージ

派生クラス(現在のパッケージにはありません)

その他のパッケージ

民間

できる

しない

しない

しない

デフォルト(権限修飾子なし)

できる

できる

しない

しない

保護(保護)

できる

できる

できる

しない

公衆

できる

できる

できる

できる

クラスメンバーを定義するときは、アクセス権を最小化するという原則に従ってください。

どこでも使用したい場合は、パブリックとして定義してください。

現在のクラスと派生クラスで直接使用する場合は、保護されていると定義します。

パッケージcom.bjpowernode.chapter01.demo02.p1;

public class Father { private int xx = 10; // private、現在のクラスでのみ使用可能int yy = 20; // default、現在のパッケージで使用可能protected int zz = 30; // protected、Use in現在のパッケージ/派生クラスpublicint oo = 40; // Public、どこでも



//在当前类中
public void m1() {
	System.out.println( xx );
	System.out.println( yy );
	System.out.println( zz );
	System.out.println( oo );
}

}

パッケージcom.bjpowernode.chapter01.demo02.p1;
/ **

  • 現在のパッケージのFatherクラスのメンバーへのアクセスをテストします
  • 同じパッケージで、デフォルトのアクセス許可/保護されたアクセス許可/パブリックアクセス許可を持つメンバーを使用できますが、プライベートメンバーは使用できません
  • @author管理者

* /
パブリッククラステスト{

public static void main(String[] args) {
	//创建Father类的对象
	Father f = new Father();
	//访问f的实例成员
	System.out.println(f.xx);  	//The field(字段/域) Father.xx is not visible(不可见), 没有访问权限
	System.out.println(f.yy);	
	System.out.println(f.zz);
	System.out.println(f.oo);
}

}

パッケージcom.bjpowernode.chapter01.demo02.p2;

インポートcom.bjpowernode.chapter01.demo02.p1.Father;

/ **

  • p2パッケージで、p1パッケージのFatherクラスのメンバーへのアクセスをテストします。
  •  只能访问公共成员 
    
  • @author管理者

* /
public class Test02 {

public static void main(String[] args) {
	Father f = new Father();
	
	//访问f的成员变量
	System.out.println(f.xx);  	//The field(字段/域) Father.xx is not visible(不可见), 没有访问权限
	System.out.println(f.yy);	
	System.out.println(f.zz);
	System.out.println(f.oo);
}

}

パッケージcom.bjpowernode.chapter01.demo02.p3;

インポートcom.bjpowernode.chapter01.demo02.p1.Father;
/ **

  • Sonクラスはp3パッケージで定義され、p1パッケージのFatherクラスを継承します。
  •  子类继承了父类, 就自动拥有了父类的实例变量与实例方法
    
  •  Son类从Father类继承了四个实例变量:xx,yy,zz,oo,和一个实例方法: m1()
    
  • @author管理者

* /
public class Son extends Father { // SonクラスはFatherクラスから4つのインスタンス変数を継承します:xx、yy、zz、oo

//子类的实例方法
//因为继承,所有自动拥有, 是否能够直接使用,跟访问权限有关
public void sm() {
	System.out.println( xx );
	System.out.println( yy );
	System.out.println( zz ); 		//受保护的
	System.out.println( oo );
}

}

Javaメソッドのオーバーライドでのアクセス許可

Javaアクセスカバレッジ(書き換え)ルール:

●サブクラスメソッドのシグネチャは、親クラスのシグネチャと一致している必要があります。メソッドシグネチャは、メソッド名とパラメータリストです。

●サブクラスメソッドの戻り値タイプは、親メソッドの戻り値タイプと同じにすることも、親メソッドの戻り値タイプのサブタイプにすることもできます。

●サブクラスメソッドのアクセス権は、親メソッドのアクセス権と同じにすることも、親メソッドのアクセス権よりも広く(大きく)することもできます。

親クラスメソッドがパブリックモディフィケーションの場合、サブクラスメソッドはパブリックモディフィケーションのみになります

親クラスのメソッドが保護されている場合、サブクラスのメソッドは保護/パブリック変更できます

●サブクラスメソッドの例外は、親メソッドの例外より大きくすることはできません

おすすめ

転載: blog.csdn.net/weixin_49543720/article/details/111691293