Java 你的多继承纳?

发表于:2013-5-22 09:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Orson    来源:51Testing软件测试网采编

  Java省略了许多很少用到,缺乏了解,混淆功能的C + +,在我们的经验中带来更多的悲伤大于收益 。

                                                                           -----James Gosling

  James Gosling 这个人大家应该很熟悉,就是最初设计Java 语言的的程序员,被称为“Java之父”,现在也有50多岁了,前几天还看过他的视频,很平易近人的一个白头老人,可能和在中国小镇随处可见的老人是一样的,完全看不出是那 SUN 的副总裁,也没有中国商人特有的做秀和狡黠。

  上面那段话是别人问到他关于 Java 为什么不能运算符重载(虽然它确实有方法重载),多重继承,以及广泛的自动强制转换时回答的一段话。他老人家说多继承会带来更多的悲伤,这悲伤到底在什么地方纳?以下是我自己的一点分析(如有不正,希望大神你出手):

  多继承的优点是显而易见的,一个子类能有多个父类的属性和方法,比如上面的那个希腊神话当中的半人马先生,继承了人和马,上半身是人的躯干,包括手和头,下半身则是马身,也包括躯干和腿,既有速度又有思维和抓取东西的能力。

  但是多继承的缺点也是一点就破:

  (1)如果一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量;

  贴段代码给看看:

public   class  ClassA {   
      protected   String  a = "same" ;   
}  
 
public   class  ClassB {   
      protected   String  a =  "Unsame" ;   
}  

public   class  ClassC  extends  ClassA, ClassB {   
         public   void  printOut() {   
                System.out.println( super .a);   //-----关键的一行-------
        }   
         public   static   void  main(String[] args) {   
                ClassC classC =  new  ClassC();   
                classC.printOut();   
        }   
}

  (PS:上面这段代码是不能编译的,我是举个例子而已)classC到底会打印same还是Unsame纳?

  (2)如果一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法;

  贴段代码看看:

class  ClassA {   
         public   void  printOut() {   
                System.out.println( "same" );   
        }   
}  

   class  ClassB {   
         public   void  printOut() {   
                System.out.println( "Unsame" );   
        }   
}  

public   class  ClassC  extends  ClassA, ClassB {   
                    public   static   void  main(String[] args) {   
                           ClassC classC =  new  ClassC();   
                           classC.printOut();  //-----关键的一行-----
                          
                   }   
           }

  (PS:上面这段代码是不能编译的,我是举个例子而已)classC到底会调用上面哪个父类的printOur()方法?

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号