java 中继承和protected修饰符的问题
问题是这样的:第一个包package1中我建了个父类A,其中有一个protected修饰的属性b.然后在第二个包package2中建了一个类B继承了A.这个时候我用父类引...
问题是这样的:
第一个包package1中我建了个父类A,其中有一个protected修饰的属性b.
然后在第二个包package2中建了一个类B继承了A.
这个时候我用父类引用子类对象时,也就是A x = new B();时,对象属性x.b却访问不到.
但是直接用子类的引用实现子类对象时,即B x = new B();x.b是可以访问的.
而protected是只要是子类都可以访问的,为什么第一种方法不可以访问?还有到底A x = new B();的意思是什么?
请高手解答,小弟很迷惑 展开
第一个包package1中我建了个父类A,其中有一个protected修饰的属性b.
然后在第二个包package2中建了一个类B继承了A.
这个时候我用父类引用子类对象时,也就是A x = new B();时,对象属性x.b却访问不到.
但是直接用子类的引用实现子类对象时,即B x = new B();x.b是可以访问的.
而protected是只要是子类都可以访问的,为什么第一种方法不可以访问?还有到底A x = new B();的意思是什么?
请高手解答,小弟很迷惑 展开
2个回答
展开全部
protected不光是子类访问限制,还有包访问限制.
你的A x = new B()肯定是在类B的包里面写的,那么先不管A x = new B()是什么意思.
只看A x ;这是A类引用无可置疑,那么引用一个什么呢?引用一个外包的对象new B(),这个对象里面有个 b(继承的),那么很自然x和new B()不在同一包,所以访问不到new B()的b
那么A x = new B();是什么意思?这是父类引用子类对象,是多态的一种表现.
多态你得看看,一言两语说不清楚.
现在来说,只要你看到接口引用引用实现类对象,父类引用引用子类对象,都是多态,这样有什么效果?你的所有实现类或者子类,可能根本不需要知道究竟有什么功能,但你始终会知道,接口或父类提供的功能.
你的A x = new B()肯定是在类B的包里面写的,那么先不管A x = new B()是什么意思.
只看A x ;这是A类引用无可置疑,那么引用一个什么呢?引用一个外包的对象new B(),这个对象里面有个 b(继承的),那么很自然x和new B()不在同一包,所以访问不到new B()的b
那么A x = new B();是什么意思?这是父类引用子类对象,是多态的一种表现.
多态你得看看,一言两语说不清楚.
现在来说,只要你看到接口引用引用实现类对象,父类引用引用子类对象,都是多态,这样有什么效果?你的所有实现类或者子类,可能根本不需要知道究竟有什么功能,但你始终会知道,接口或父类提供的功能.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询