在Java中有一个比较轻易疏忽的问题,那就是继续类的权限与基类的权限之间的关联。由于日常平凡在运用继续类的时刻,大概很少会需要到修正基类的接见权限控制符,而是直接运用基类的接见权限控制符。
假如基类有属性要领是private的,那末子类是不是能够修正为protected,假如是protected,那末子类是不是能够修正为public或许private呢?接下来就看一下这个问题。
相干视频教程引荐:java教授教养视频
一、基类要领为private
起首,假如基类的属性要领是private的,那末子类可否修正为protected或许public呢?答案是不是定的,这个答案略加推理就可以得出来,既然基类的属性要领是private的,那末他关于子类就不可见,既然子类都不可见,怎样还能修正基类要领的权限控制符呢。
我们能够用一段代码来考证这个问题:
/*BaseClass.java*/ public class BaseClass { private void test() {} } /*ExtendClass.java*/ public class ExtendClass extends BaseClass { //@Override protected void test() {} }
上面的代码假如将注解去掉,那末就会报错,提醒找不到要领,由于基类的要领的private的,假如去掉注解就没有问题,但此时子类的test()要领与基类的test()要领是两个完整没有关联的要领。
二、基类要领为friendly
假如基类要领为friendly,即为默许的权限,那末就分为两种状况,一种是子类与基类处于统一包内,一种是子类与基类不在统一包内。当子类与基类在统一包内的时刻,是能够将权限控制符扩大为protected或许public的:
/*BaseClass.java*/ package demo1; public class BaseClass { void test() {} } /*ExtendClass.java*/ package demo1; public class ExtendClass extends BaseClass { @Override protected void test() {} }
上述两个类都在包demo1下,代码能准确运用。然则当子类与基类不在统一包的时刻,状况就不一样了:
/*BaseClass.java*/ package demo2.demo1; public class BaseClass { void test() {} } /*ExtendClass.java*/ package demo2; public class ExtendClass extends BaseClass { //@Override protected void test() {} }
假如子类与基类不在统一包,那末就不能扩大默许权限,缘由实在与private一样,子类不能瞥见基类的要领,因而也就不能扩大要领的权限控制符。
三、基类要领为protected
假如基类的要领为protected,那末子类就可以够将接见控制符扩大为public:
/*BaseClass.java*/ package demo2.demo1; public class BaseClass { protected void test() {} } /*ExtendClass.java*/ package demo2; public class ExtendClass extends BaseClass { @Override public void test() {} }
四、总结
实在想要弄清扩大的状况很轻易,记着下面这个原则:理论上说子类是能够扩大基类的接见权限控制符,然则不能减少基类的接见权限控制符,而且仅当子类能瞥见基类的要领的时刻能够扩大。
想进修更多相干教程能够接见:java零基本入门
以上就是关于java中继续类的权限问题的细致引见的细致内容,更多请关注ki4网别的相干文章!