java继承访问权限,java中类的继承关系

  java继承访问权限,java中类的继承关系

  Java中有一个容易被忽略的问题,就是继承类的权限和基类的权限之间的关系。通常使用继承类时,很少需要修改基类的访问控制,而是直接使用基类的访问控制。

  如果基类有一个私有的属性方法,子类可以被改变为protected吗?如果是,子类可以改成public或者private吗?接下来我们来看看这个问题。

  相关视频教程推荐:java教学视频

  一、基类方法为private

  首先,如果基类的property方法是private,那么子类可以修改为protected或者public吗?答案是否定的,这个答案稍加推理就能得出。因为基类的属性方法是私有的,所以它对子类是不可见的。既然子类是不可见的,那么如何修改基类方法的权限控制器呢?

  我们可以用一段代码来验证这个问题:

  /*BaseClass.java*/

  公共类基类{

  私有void测试(){}

  }

  /*ExtendClass.java*/

  公共类ExtendClass扩展基类{

  //@覆盖

  受保护的void测试(){}

  }如果上面的代码删除了注释,会报错,表示找不到方法,因为基类的方法是私有的。如果去掉注释就不会有问题,但此时子类的test()方法和基类的test()方法是两个完全不相关的方法。

  二、基类方法为friendly

  如果基类方法是友好的,也就是默认权限,有两种情况,一种是子类和基类在同一个包里,另一种是子类和基类不在同一个包里。当子类和基类在同一个包中时,可以将权限控制器扩展为protected或public:

  /*BaseClass.java*/

  程序包演示1;

  公共类基类{

  无效测试(){}

  }

  /*ExtendClass.java*/

  程序包演示1;

  公共类ExtendClass扩展基类{

  @覆盖

  受保护的void测试(){}

  }以上两个类在包demo1下,代码可以正确使用。但是当子类与基类不在同一个包中时,情况就不同了:

  /*BaseClass.java*/

  包demo 2 . demo 1;

  公共类基类{

  无效测试(){}

  }

  /*ExtendClass.java*/

  包demo2

  公共类ExtendClass扩展基类{

  //@覆盖

  受保护的void测试(){}

  }如果子类与基类不在同一个包中,那么默认权限就不能扩展。原因其实和私了一样。子类看不到基类的方法,所以它不能扩展方法的权限控制器。

  三、基类方法为protected

  如果基类的方法受到保护,那么子类可以将访问控制器扩展为public:

  /*BaseClass.java*/

  包demo 2 . demo 1;

  公共类基类{

  受保护的void测试(){}

  }

  /*ExtendClass.java*/

  包demo2

  公共类ExtendClass扩展基类{

  @覆盖

  公共void测试(){}

  }四、总结

  其实很容易发现延伸情况。记住以下规则:理论上,子类可以扩展基类的访问控制,但不能缩小基类的访问控制,只有当子类可以看到基类的方法时才能扩展。

  如果想了解更多相关教程,可以访问:java零基础入门。以上是关于java中继承类的权限的详细介绍的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: