黑马程序员技术交流社区

标题: 为什么接口可以多实现,类只能单继承! [打印本页]

作者: Im_back    时间: 2014-8-4 19:04
标题: 为什么接口可以多实现,类只能单继承!
为什么接口可以多实现,类只能单继承?

作者: 卢宝辉    时间: 2014-8-4 19:14
想想,如果多继承、父类中有同名同参同返回的方法,子类要覆盖父类的这个方法、但运行环境怎么知道你的子类要覆盖的是哪个父类的方法呢?
作者: 追逐我的明天    时间: 2014-8-4 19:16
如果一个类可以继承多个类,那么这个类所有成员变量名和方法名必须要不同(C++就是这样要求的).这是前提,我们必须确定这个才能用多重继承,如果在类方法名或者成员变量名很多情况下,这是很复杂的事情.原因:要确定子类到底继承方法或属性是哪一父类的
作者: 追逐我的明天    时间: 2014-8-4 19:17
本帖最后由 张然龙 于 2014-8-4 20:14 编辑

接口是定义规范声明约束,类实现接口并不存在于继承体系,而是单纯的实现了功能扩展,声明约束.

而类与类之间的继承则不同,类与类之间存在着复杂的继承体系.

如果类可以多继承,势必会导致类与类之间的关系错综复杂而难于维护.

java不同于C++,java是C++的改进版, 初衷是抹去了C++的不合理方面.

而多重继承,就被sun公司认为是不合理的,所以取消了C++的多重继承.

但是为了使得程序的扩展性提高,接口的多实现并没有取消.


作者: Im_back    时间: 2014-8-4 19:23
追逐我的明天 发表于 2014-8-4 19:17
类与接口可以多重实现(接口与接口之间可以有相同的方法名),
接口中没有成员变量(只有常量),而方法是抽象的, ...

如果,不同接口中的定义的属性同类型,同名怎么办?
作者: 追逐我的明天    时间: 2014-8-4 19:32
Im_back 发表于 2014-8-4 19:23
如果,不同接口中的定义的属性同类型,同名怎么办?

package 游戏;

public class lianxi implements halou,halou1 {
        public static void main(String[] args) {
                System.out.println(halou1.a);
                }
        }
interface halou{
        public static final int a = 0;
}
interface halou1{
        public static final int a = 1;
}

接口的都是有固定形式的 上面需要指定的
作者: paozhuanyinyu    时间: 2014-8-4 21:07
接口一般指对象具有的功能,就拿人类来举例说明,人可以有很多技能,但是只能有一个爸爸。
作者: 执笔梦    时间: 2014-8-4 21:12
从面向思想来说,
接口是一种规范,
而类是一种体系
个人理解
作者: 草鱼狂飙    时间: 2014-8-4 21:17
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

作者: 南柯一梦    时间: 2014-8-4 21:27
类如果多继承的话,如果多个类都有同名函数,调用时出错
作者: 姜佳文    时间: 2014-8-4 21:29
为什么不支持多继承?因为当一个继承多个类时,如果继承的多个父类出现了相同的方法时,就出现了调用的不确定性,这个不确定是指方法体不确定虚拟机就挂了。解释下为什么支持多实现:虽然实现了多个接口,但是接口中的方法没有方法体,不管你调用复写实现的接口中任意方法都是一样的,因为它没有方法体,方法明名相同也没问题。
作者: 继续悲伤    时间: 2014-8-4 22:05
你就记成硬性规定就行了啊!
作者: 刷了牙就睡    时间: 2014-8-4 22:06
规则~~~你还想怎么样~
作者: 刘小印    时间: 2014-8-4 22:07
接口往往是用来扩展功能的,可以扩展多个功能,而一个类只能有一个父类,但是可以有爷爷,老爷什么的。只能一个老爸把
作者: 唐覃利    时间: 2014-8-4 22:09
还是要好好学习啊   
作者: 郭旭辉    时间: 2014-8-4 22:59
一个父类可以有很多子类。就好比一个父亲可以有好多儿子。。可是一个儿子只能有一个亲生父亲吧。。所以类只能单继承。。可是有些时候还需要调用其他类的一些方法或者属性,但是那个类并不是所有的方法或属性都适合那个对象。。所以用接口。。恩。。就好比认干爹的样子。。 总之一句话,一个儿子只能有一个亲爹,但是可以有很多干爹。这个干爹就是接口。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2