1. 程式人生 > >從實例角度分析java的public、protected、private和default訪問權限

從實例角度分析java的public、protected、private和default訪問權限

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 extends
A { 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訪問權限