protected修饰符的用法有个小疑惑

两年半 2018-05-10 09:15:46
今天我看了一本书叫做设计模式之禅,其中一个小部分有一点不太懂,父类中用protected修饰符修饰了成员对象,子类中应该是继承了父类的成员对象,子类中代码在使用成员对象的时候为什么一定要使用super关键字,我试过在代码结果中去掉super关键字发现并没有出现编译和运行错误,这个super是必须的吗,使用super关键字有什么好处吗?求解,谢谢
...全文
880 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
txwh_2169 2018-05-11
  • 打赏
  • 举报
回复
不一样的,没用Super.隐含的是this.调用的是自己的方法,用了Super显式调用父类的方法。如果子类没有实现或重写这个方法,JVM会自动调用父类的同签名方法。 你可以在父类里加上两个方法: protected void printA()(System.out.Print("Print Parent A");) protected void printB()(System.out.Print("Print Parent B");) 然后在子类里重写父类的方法A: protected void printA()(System.out.Print("Print Child A");) 在子类里添加方法: public void print(){ this.PrintA(); super.PrintA(); this.printB(); super.printB(); } 这样你就能看出区别来了。Super和This如果乱用某些逻辑会出错
  • 打赏
  • 举报
回复
子类继承父类时,会默认有一个父类所有可继承成员变量的变量,super. 是在调用从父类继承的这个变量 当你在子类中没有同名的成员变量时,写不写都一样,都是调用同一个变量(刚才继承时默认的) 但是当你子类存在一个跟父类同名的成员变量,比如你子类也定义一个Sale sale,那么你不写super调用的就是你自己定义的sale,写了super调用的就是父类继承的,是属于二个不同的对象。
usecf 2018-05-10
  • 打赏
  • 举报
回复
super是你在子类中没自己实现某个方法的时候,会调用父类的方法的 不写super的话,如果你子类没处理相应的事件,就不会传给父类的

50,639

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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