单继承和多实现需要注意的两点

张三和李四一同到一家公司去应聘,二人被安排同时接受经理的面试。

经理拿出一个代码片段:

 

 
  1. public class Father {

  2.  
  3. public void makeMoney(){

  4. System.out.println("赚了1亿");

  5. }

  6. }

  7. public class Mother {

  8.  
  9. public void makeMoney(){

  10. System.out.println("赚了5000万");

  11. }

  12. }

  13. public class Son extends Father extends Mother{

  14.  
  15. @Override

  16. public void makeMoney() {

  17. System.out.println("赚了500万");

  18. }

  19.  
  20. public static void main(String[] args) {

  21. Son son = new Son();

  22. son.makeMoney();

  23. }

  24. }

经理问:运行Son的main方法,会发生什么?

张三见状,抢答道:“这么简单,500万!”

经理看没说话,看着李四。

李四扫了一眼代码,缓缓的说了一句:第一行,第27个字符那里,eclipse会提示"Syntax error on token "extends", implements expected",intellj idea会提示"{ expected"。

经理:惊恐,不好意思,弄错了,我改一下?

张三:"......"

 
  1. public class Son extends Father , Mother{

  2.  
  3. @Override

  4. public void makeMoney() {

  5. System.out.println("赚了500万");

  6. }

  7.  
  8. public static void main(String[] args) {

  9. Son son = new Son();

  10. son.makeMoney();

  11. }

  12. }

 

经理:这样呢?

张三又是第一个回答:这回总是500万吧,反正不是1亿,也不是5000万。

李四回答:eclipse会提示...

还没等李四说完,经理突然打断:行了,行了,你就告诉我这样写有没有问题,有什么问题。

李四继续回答:早说嘛,这样写有问题,会编译不通过,因为java不允许多重继承。

张三:多重继承,什么玩意儿

李四:假设java允许多重继承,那么Son就可以重载Father和Mother中的方法,这两个方法的参数列表、方法签名都是一样的,java会搞不清楚到底是重载Father还是Mather的方法。但如果你把Father、Mother都改成interface,就算他们的参数列表、方法签名都是一样的,由于接口并不提供实现。所以,并没有冲突

经理:既然你提到了interface,那我接下来把Father改成这样,然后Son同时实现这两个接口,应该怎么写呢?

 

 
  1. public interface IFather {

  2.  
  3. void makeMoney(String date);

  4. }

  5. public interface IMother {

  6.  
  7. long makeMoney(String date);

  8. }

张三:你把IMother中的makeMoney的返回值也改掉了,呵呵,幸亏我眼尖呐,看我的。

张三迅雷不及掩耳地写出了代码

 

 
  1. public class Son implements IFather , IMother{

  2.  
  3.  
  4. public static void main(String[] args) {

  5. Son son = new Son();

  6.  
  7. }

  8.  
  9.  
  10. @Override

  11. public void makeMoney(String date) {

  12.  
  13. }

  14.  
  15. @Override

  16. public long makeMoney(String date) {

  17.  
  18. }

  19. }

经理:哈哈哈...

经理冷笑一声,问李四:你写的代码呢,写不出来吗。

李四并不着急,只是说了一句:不是我写不出来,是java不让我写啊。

张三:java不让你写?手长在你身上,怎么不让你写了,我看你就是不会。

经理对张三说:张先生,很高兴您来我们这里面试,我认为您不能胜任我们的工作,这次面试就到这里了,谢谢。

张三:什么意思,你现在只出了一道题,我也给出了正确答案。不行,我不走,我要继续答题。

经理:保安!

“我要继续面试啊,你们干什么?老子会spark......”

 

 

 

 

总结一下,继承是不允许多继承的,怕的就是这种两个方法一样,那 jvm根本不知道怎么办,另外就是接口的多实现中如果两个方法不一模一样,那么也不会让同时实现这两个接口

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值