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

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

经理拿出一个代码片段:

 
  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根本不知道怎么办,另外就是接口的多实现中如果两个方法不一模一样,那么也不会让同时实现这两个接口

猜你喜欢

转载自blog.csdn.net/Arya_boy/article/details/81668128