网站建设专业总结,学生信息管理系统网页设计教程,网站群管理,大学电子系的建设网站的方案Java省略了许多很少用到#xff0c;缺乏了解#xff0c;混淆功能的C #xff0c;在我们的经验中带来更多的悲伤大于收益 。 -----James Gosling James Gosling 这个人大家应该很熟悉#xff0c;就是最初设计Java 语言的的程序… 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()方法? 上面的这些都是致命的歧义所以java中禁止一个类继承多个父类 但是那个白头发的老人在很多年前就给 java提供了接口并能通过接口的功能获得多继承的许多优点而又摒弃了类与类多继承的缺点。 这到底是怎们做到的纳嗯好了我们也来详细的分析一下 java允许一个接口继承多个父接口也允许一个类实现多个接口而这样的多继承有上面提到的缺点吗 因为有接口的抽象性所以答案肯定是没有 1在接口中不能有实例变量只能有静态的常量每个静态的常量在程序开始运行前都已经初始化成功如果有重命名的出现编译器先生会及时的告诉你的 2接口中不能有具体的方法包含方法体只能有抽象方法具体的方法只能由实现接口的类实现在调用的时候也只会调用实现类的方法这样是不会存在歧义的 那门开篇的那半人马就可以这样来写了 interface Humain {String arm 2只能抓东西的胳膊;void output();
}interface Horse {String leg 4只能跑的腿;void output();
}interface Half extends Humain, Horse {
}public class HalfHorse implements Half {// 实现上面俩个接口里面的同名方法// 这个类拥有两个接口的静态变量public void output() {System.out.println(我是个有 arm 和 leg 的半人马);}public static void main(String[] args) {HalfHorse halfhorse new HalfHorse();halfhorse.output();}
} PS:上面这段代码是可以编译通过的 因为引入了接口所以程序员有很大空间的想象力这可能就是Java吸引许多人的魅力之一了。