dong瓜

导航

java 访问修饰符详解

java 访问修饰符有  public、 protected、默认(default)、private

  本类 同包 子类 不同包
public y y y y
protected y y y n
默认 y y n n
private y n n n

以下进行测试后的总结:

存在一下代码:(以下类都public类型的)

  package1包,:有a类,b类(继承a类),test1类

  package2包 :有c类(继承a类)、d类(继承b类),test2类

 

public: 在本类、同包、子类、不同包都可调用public属性、方法

private: 只有在本类可调用private属性、方法

默认(default) :  本类、同包类、同包中的子类可调用default属性、方法

  同包类中的子类-------例子如下:

    testl1类可以调用a类的default属性、方法

    b类可以调用a类的default属性、方法-----------虽说子类不能调用,但是在同包时可以调

    c类不可以调用a类的default属性、方法-----------和上一个情况不一样,c类处于不同包

    d类不可以调用a、b类的default属性、方法-----------同理:d类处于不同包

  default总结: 就算是子类也要看是否同包,看是否同包,即:在开始调用的类和被调用的类是否属于同包

protected: 本类、同包、子类

  testl1类可以调用a类的protected属性、方法

  子类可以存在同包和不同包,以下讨论:

    同包的子类:

      在b类调用a类的protected属性、方法-----------b属于a类子类

      在test1类中可以通过b类调用a类的protected属性、方法-----------test1与a类属于同一个包中

    不同包的子类

      在d类调用a、b类的protected属性、方法-----------d属于a类子子类

      在test1类中可以通过d类调用a、b类的protected属性、方法,而不能调用d类的protected属性、方法-----------test1与a、b类属于同一个包中;  test1类和d类属于不同包

      在test2类中不可以通过d类调用a、b类的protected属性、方法,而能调用d类的protected属性、方法-----------test2与a、b类属于不同包中;  test2类和d类属于同包

          protected总结: 就算是子类也要看是否同包,看是否同包,即:在开始调用的类和被调用的类是否属于同包

  

 

posted on 2021-12-14 15:34  dong瓜(TreeSky)  阅读(92)  评论(0编辑  收藏  举报