第一个包package1中我建了个父类A,其中有一个protected修饰的属性b. 然后在第二个包package2中建了一个类B继承了A. 这个时候我用父类引用子类对象时,也就是A x = new B();时,对象属性x.b却访问不到. 但是直接用子类的引用实现子类对象时,即B x = new B();x.b是可以访问的. 而protected是只要是子类都可以访问的,为什么第一种方法不可以访问?还有到底A x = new B();的意思是什么? 请高手解答,小弟很迷惑
调试欢乐多
你只要在A类中变量前加个static 就可以拉
http://blog.qingdaonews.com/v/9222/archives/2007/138988.html另外protected修饰的具有包访问权限,你的两个类不在同一个包中,所以不能被访问到
x定义为A类型,那么编译时候就认为x是A类型的(x是一个存放类A的对象地址的引用型变量),跟x的实际类型没有关系.
另外A类型只能知道谁是其超类,但并不能知道谁是其子类.
所以在package2的B类型中x去调用protected的b就相当于一个去调用一个默认权限的b,
因为不在一个包内,所以自然无法调用.
而将x定义为B类型,x调用b时,编译器会检查x时候在B类中,或者在A类中
结果是确实在,所以可以调用.至于static,如果b是static的,那么x.b是相当于A.b,在B中访问protected的A.b,理所当然
System.out.println(a.a);replaced with a, error still; but if put it back to the superclass A's packet, it's done. in a word, 'protected' is the packet-decorater