码迷,mamicode.com
首页 > 其他好文 > 详细

声明和访问控制

时间:2018-01-31 01:11:44      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:int   parent   通过   ack   控制   使用   body   cte   ali   

保护和默认成员(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);//这样是错误的

    }

  }

 

声明和访问控制

标签:int   parent   通过   ack   控制   使用   body   cte   ali   

原文地址:https://www.cnblogs.com/weixingyuan/p/8387325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!