Java 你的多继承纳?
作者:网络转载 发布时间:[ 2013/5/22 10:21:17 ] 推荐标签:
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()方法?
相关推荐
更新发布
常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11系统性能测试及调优前期准备
2021/4/15 14:41:29国内比较好用的5款测试管理工具
2021/3/25 17:23:31