本文主要是介绍关于JAVA中protected访问修饰符的一些问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最进在学习java这门语言,学到访问修饰符时遇到了一些问题,public和private倒是没有什么问题,但是这个protected就很有意思了,我看到书上说:
“被 protected 修饰的成员对于本包和其子类可见。”
这一句简单的解释我有点摸不着头脑,在本包内都可见我可以理解意思就是在当前包下都可以访问到它,那么其子类可见怎么解释,是在当前包下的子类还是所有包下的它的子类都可见呢?于是我又上网进行了搜索,找到了更加详细的解释如下
基类的 protected 成员是包内可见的,并且对子类可见;
若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
这句话描述的很详细了,但对于初学者来说这句 “子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法” 还是有一些歧义,后一句话说的好像是子类实例不能访问基类实例的protected方法,我就想,子类实例怎么访问基类实例呢?又看了一下具体的实例我才理解了这句话。
基类的 protected 成员是包内可见的,并且对包内子类可见;
若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而我们不能通过基类实例访问基类的protected方法。
也就是说如果子类在另一个包中继承了基类,我们可以利用子类的实例对象访问基类的protected成员,但是我们不能通过基类的实例对象访问基类的protected。
下面给出代码示例:
package p;
class MyObject {protected int test() {return 1;}
}----------------分割线,上下属于不同包---------------------package p1;
public class SonObject extends MyObject {public static void main(String args[]) {MyObject2 obj = new MyObject();//生成父类实例对象obj.test(); // Compile Error SonObject tobj = new SonObject();//生成子类实例对象tobj.test(); // Complie OK }
}
这篇关于关于JAVA中protected访问修饰符的一些问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!