声明和访问控制

Posted weixingyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了声明和访问控制相关的知识,希望对你有一定的参考价值。

保护和默认成员(protected)

1、保护和默认访问控制级别几乎完全相同,但只有一点主要区别,只有当访问默认成员的类属于同一个包时,才能访问默认成员。而对于protected类成员而言,只要继承了父类,即使子类位于不同的包中,该子类也能访问它。而默认则不同,如果在不同的包中就无法访问。

 

例如:

package parent;

public class Parent{

  protected int x = 10;

}

 

package child;

class Child extends Parent{

  public void testIt(){

    System.out.println("x is:" + x);

  }

}

这个Child类通过继承访问这个保护变量,无论何时当子类访问父类成员时,都是在谈论子类继承成员,而不是通过父类的引用访问该成员。

如果把上面的代码改成

  Parent  p = new Parent();

  System.out.println(p.x);

  这样将会报错

 

   技术分享图片

  包外子类能继承保护成员,并且包外子类不能使用父类引用访问保护成员,对于包外子类,只能通过继承来访问保护成员。

 

  2、倘若包外子类,例如刚刚的Child类,如果和Child类在同一个包下有一个Child2类,那么如果该Child2类有Child类的引用,并且访问变量x,那么此时将会报错。因为子类一旦继承了保护成员,该保护成员对这一子类的任何代码都便成为了私有的了。那么即使Child2与Child在同一个包下,Child2也不能访问该继承的变量。

 

  3、private public protected这样的访问修饰符是用来修饰成员变量的而不能修饰局部变量,事实上只有一个修饰符final能用来修饰局部变量。

 

  class Foo{

  void doSomething(){

      private int x = 7;

      this.otherMethod(x);//这样是错误的

    }

  }

 

以上是关于声明和访问控制的主要内容,如果未能解决你的问题,请参考以下文章

如何访问其他控制器类中 UIImageView 子类中声明的图像属性?

java基础01 访问控制,staticfinal和static final

java基本数据类型与访问控制符

Java访问控制修饰符权限

Java访问控制修饰符权限

Java访问控制权限