從實例角度分析java的public、protected、private和default訪問權限
阿新 • • 發佈:2017-10-17
png mage 分享 import 調用 ring lin tro 1.5
一、public
同一個package
1.本類內部
public class A { public int f=1; public void m1() {} public void m2() { f=2; //類內部正常訪問 m1(); //類內部正常訪問 } }
2.子類
package same; public class A { public int f=1; public void m1() {} }
package same; public class B extendsA { public void m2() { f=2; //調用父類的public成員變量 m1(); //調用父類的public成員方法 } }
3.普通類
package same; public class A { public int f=1; public void m1() {} }
package same; public class B { public static void main(String[] args) { A a =new A(); a.f=2; //同一個包內 對類A的對像裏面的public成員變量訪問 a.m1(); //同一個包內 對類A的對像裏面的public成員方法訪問 } }
不同package之間
1.子類
package same; public class A { public int f=1; public void m1() {} }
package other; import same.A; public class B extends A { public void m2() { f=2; //對類A的的public成員變量訪問m1(); //對類A的的public成員方法訪問 } }
2.普通類
package same; public class A { public int f=1; public void m1() {} }
package other; import same.A; public class B { public static void main(String[] args) { A a=new A(); a.f=2; //不同包之間 對類A的對像裏面的public成員變量訪問 a.m1(); //不同包之間 對類A的對像裏面的public成員方法訪問 } }
二、protected
同一個package
1.本類內部
package same; public class A { protected int f=1; protected void m1() {} public void m2() { f=2; //訪問本類的protected成員變量 m1(); //訪問本類的protected成員方法 } }
2.子類
package same; public class A { protected int f=1; protected void m1() {} }
package same; public class B extends A { public void m2() { f=2; //訪問父類的protected成員變量 m1(); //訪問父類的protected成員方法 } }
3.普通類
package same; public class A { protected int f=1; protected void m1() {} }
package same; public class B { public void m2() { A a=new A(); a.f=2; //訪問A類對像的protected成員變量 a.m1(); //訪問A類對像的protected成員方法 } }
不同package之間
1.子類
package same; public class A { protected int f=1; protected void m1() {} }
package other; import same.A; public class B extends A { public void m2() { f=2; //對類A的的protected成員變量訪問 m1(); //對類A的的protected成員方法訪問 } }
2.普通類
package same; public class A { protected int f=1; protected void m1() {} }
package other; import same.A; public class B { public void m2() { A a=new A(); //a.f=2; 無法對類A對像的protected成員變量訪問 //a.m1(); 無法對類A對像的protected成員變量方法 } }
三、default
同一個package
1.本類內部
package same; public class A { int f=1; void m1() {} public void m2() { f=2; //訪問本類的default成員變量 m1(); //訪問本類的default成員方法 } }
2.子類
package same; public class A { int f=1; void m1() {} }
package same; public class B extends A { public void m2() { f=2; //訪問A類對像的default成員變量 m1(); //訪問A類對像的default成員方法 } }
3.普通類
package same; public class A { int f=1; void m1() {} }
package same; public class B { public void m2() { A a=new A(); a.f=2; //訪問A類對像的default成員變量 a.m1(); //訪問A類對像的default成員方法 } }
不同package之間
1.子類
package same; public class A { int f=1; void m1() {} }
package other; import same.A; public class B extends A { public void m2() { //f=2; 無法對類A的default成員變量訪問 //m1(); 無法對類A的default成員變量方法 } }
2.普通類
package same; public class A { int f=1; void m1() {} }
package other; import same.A; public class B { public void m2() { A a=new A(); //a.f=2; 無法對類A對像的default成員變量訪問 //a.m1(); 無法對類A對像的default成員變量方法 } }
四、private
同一個package
1.本類內部
package same; public class A { private int f=1; private void m1() {} public void m2() { f=2; //訪問本類的private成員變量 m1(); //訪問本類的private成員方法 } }
2.子類
package same; public class A { private int f=1; private void m1() {} }
package same; public class B extends A { public void m2() { //f=2; 無法訪問A類的private成員變量 //m1(); 無法訪問A類的private成員方法 } }
3.普通類
package same; public class A { private int f=1; private void m1() {} }
package same; public class B { public void m2() { A a =new A(); //a.f=2; 無法訪問A類對像的private成員變量 //a.m1(); 無法訪問A類對像的private成員方法 } }
不同package之間
1.子類
package same; public class A { private int f=1; private void m1() {} }
package other; import same.A; public class B extends A { public void m2() { //f=2; 無法對類A的private成員變量訪問 //m1(); 無法對類A的private成員變量方法 } }
2.普通類
package same; public class A { private int f=1; private void m1() {} }
package other; import same.A; public class B { public void m2() { A a=new A(); //a.f=2; 無法對類A對像的private成員變量訪問 //a.m1(); 無法對類A對像的private成員變量方法 } }
從實例角度分析java的public、protected、private和default訪問權限