java继承中的protected

Edda_Huang 2017-06-25 11:53:28
直接上图,哪位大神帮我梳理一下为什么当c(不同包的类)引用父类b的时候为什么不能调用他的方法呢、

包结构:


parent包下类a


parent包下类b


parent包外类c

无法调用c1的方法
...全文
335 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
H_WU_ 2017-06-26
  • 打赏
  • 举报
回复
你只是实例化了一个B对象,跟继承没关系的,你的C继承了B,所以C是有B的protected的方法的,但你这是实例化B,在不同的包中,就只能调用公共的方法
soton_dolphin 2017-06-26
  • 打赏
  • 举报
回复
c1不是继承而是声明了一个B的实例,B的实例在不同包里只能调用公共方法。 要想调用B的方法,直接用super.methodName().
u010004204 2017-06-26
  • 打赏
  • 举报
回复
引用 楼主 aimiaochun1 的回复:
无法调用c1的方法
什么c1?我找了半天没找到你说的c1是啥
soton_dolphin 2017-06-26
  • 打赏
  • 举报
回复
C 继承自 A, B


声明一个C类型的变量,并实例C。 A, B, C 所有公共方法都可用


声明一个B类型的变量,并实例C。 B 所有公共方法都可用,A 和C自己的公共方法被隐藏


声明一个A类型的变量,并实例C。 A所有的公共方法都可用,B和C自己的公共方法被隐藏。



注意这里是被隐藏,而不是消失或删除。在内存里C的对象始终都有A,B两个类继承的方法和C自己定义的方法
soton_dolphin 2017-06-26
  • 打赏
  • 举报
回复
引用 7 楼 aimiaochun1 的回复:
[quote=引用 2 楼 soton_dolphin 的回复:] c1不是继承而是声明了一个B的实例,B的实例在不同包里只能调用公共方法。 要想调用B的方法,直接用super.methodName().
我引用的是B而已,B c1=new C();具体new出来的是对象C啊,根据多态这个语法是没问题的,为什么无法通过c1调用C的方法呢[/quote] 可以调用哪个方法是看变量的类型,具体这个方法如何执行,是看实例的类型: 调用看左,执行看右。 c1 声明为 B类,只能执行B中的公共方法,如果 C类有重写那个方法,那么执行的逻辑就是C类里重写的逻辑
Edda_Huang 2017-06-26
  • 打赏
  • 举报
回复
引用 2 楼 soton_dolphin 的回复:
c1不是继承而是声明了一个B的实例,B的实例在不同包里只能调用公共方法。 要想调用B的方法,直接用super.methodName().
我引用的是B而已,B c1=new C();具体new出来的是对象C啊,根据多态这个语法是没问题的,为什么无法通过c1调用C的方法呢
Edda_Huang 2017-06-26
  • 打赏
  • 举报
回复
引用 1 楼 u010004204 的回复:
[quote=引用 楼主 aimiaochun1 的回复:] 无法调用c1的方法
什么c1?我找了半天没找到你说的c1是啥[/quote] 最后一张图。我引用的是B而已,B c1=new C();具体new出来的是对象C啊,根据多态这个语法是没问题的,为什么无法通过c1调用C的方法呢
Edda_Huang 2017-06-26
  • 打赏
  • 举报
回复
引用 3 楼 H_WU_ 的回复:
你只是实例化了一个B对象,跟继承没关系的,你的C继承了B,所以C是有B的protected的方法的,但你这是实例化B,在不同的包中,就只能调用公共的方法
我引用的是B而已,B c1=new C();具体new出来的是对象C啊,根据多态这个语法是没问题的,为什么无法通过c1调用C的方法呢
cn1755255 2017-06-26
  • 打赏
  • 举报
回复
protected 这个东西,不要出本类以及子类,他的作用域就那么大,朋友看看作用域有助于了解你的问题

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧