从实例角度分析java的public、protected、private和default访问权限

时间:2023-03-10 02:16:25
从实例角度分析java的public、protected、private和default访问权限

从实例角度分析java的public、protected、private和default访问权限

一、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成员变量方法
}
}