Javaアクセス制御に対する自分の理解について話します


これまでずっと深く研究していなかったので、見ればいいと思っていましたが、今行ってみるとprotectedというコントロールに引っかかっていました.
 
public:これは理解しやすいですが、完全に公開されています.
 
private:外部クラスはアクセスできず、クラスの内部でのみ使用できます.この文字修飾のフィールドとメソッドについては、次の2つの言い方があります.
1.クラスオブジェクトは親オブジェクトの完全なコピーを持つ.1つのクラスをインスタンス化するのは最上位のスーパークラスからインスタンス化され、1層1層のラップ構造である.private制限アクセス方式はクラスの内部にしかありません.これはアクセス制御にすぎません.実際には、サブクラスオブジェクトは親オブジェクトのすべてを持っています.
2、すべてのドキュメントから見ると、privateは布団類に継承できないことがほとんど示されています.しかしJAASの存在により、privateの制御を突破してその中のprivateオブジェクトにアクセスすることができ、この場合、privateはすでに布団類に継承されていることが分かった.
 
この二つの問題は私もよく分かりませんか.深く研究しても成果がありません.
 
default(friendly):同じパッケージにのみアクセスできます.サブクラスと親クラスが同じパッケージにある場合、サブクラスもアクセスできます.
 
protected:この権限はdefaultのスーパーセットに属しているでしょう.他の饅頭類の継承は許可されていますが、外部から直接サブクラスの関連メンバーに直接アクセスすることは許可されていません.サブクラスでしかアクセスできません.これも私が変になったところです.
次は私が始めたコードです.
 
package Study;

public class Parent {
 
	private int i;
	int j;
	protected int m;
	public int n;

}
package Study.Study;
import Study.*;
class Child3 extends Parent{}


public class Child2 extends Parent{
 
	public static void main(String[] args) {
  
		Child3 x=new Child3();
		x.m=1;
		Child2 y=new Child2();
		y.m=2;
	}  
}

上記のコードはx.m=1でエラーが報告され、y.mは順調にコンパイルされます.mainメソッドが存在するクラスchild 2はparentのサブクラスであるため、パッケージに関係なくParentのprotectedメンバーにアクセスできます.
 
  
x.m    ,   x Child3   ,main      Child3     ,        m。