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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。