A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

抽象类的子类必须将父类中的抽象成员方法全部重写,那接口呢?是不是也要在子类中全部重写?不需要的功能不重写行吗?还有,java不允许多继承,为什么接口可以,接口是怎么避免多继承带来的危害?

5 个回复

倒序浏览
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。所以接口中的所有方法都必须实现
子类如果是非抽象类,那么一定要实现父类中所有的抽象方法,但是,如果子类也是抽象类,那么可以不实现父类中所有的抽象方法,可以实现一部分抽象方法。
多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的
(1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量
(2)如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法
在接口中不能有实例变量,只能有静态的常量,不能有具体的方法(包含方法体),只能有抽象方法,因此也就摒弃了多继承的缺点。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
我也是新手,谈谈我的浅见:
接口中的方法本来就很少,相当于一个没有其他方法只有抽象方法的特殊抽象类,所以应该需要全部重写吧
接口中只定义方法,没有属性,有变量的话也是不可更改的,而父类的话就杂七杂八一大通,多继承容易混乱吧,而接口比较单一。就如儿子一样,他的大部分属性只能继承自他的父母(父类),比如长相,身高,眼睛,鼻子。。。但他以后的跑步姿势(接口)可以是三大叔的,走路方式可以是二大爷的。
完全瞎写,词不达意的话请见谅

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报 1 0
董振冬 发表于 2014-4-3 23:22
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为p ...

谢谢,那你的回答正是我想要的!
回复 使用道具 举报
抽象类继承父类的方法,不是一定要覆写它,简单的说抽象类就是将一个功能起个名,不用实现该功能,当你
想要实现该功能时在具体实现。其实你明白抽象类和接口的不同就清楚了:
1、接口是 interface+类名,类内全是方法名,无方法体例:show();
2、抽象类是abstract+class+类名,内部有部分用abstract修饰的方法名,例abstract show(),但是他是可以有分抽象方法的;
3、抽象类被继承时,不需要重新所有的抽象方法,只需覆写你需要的。而实现接口必须实现所有的抽象方法。
另外,为什么java不支持多继承呢?
这是因为当多个父类中有相同的方法名,当方法体不同时,子类就不知道继承的是那个了。
相反,当是多实现时,因为接口中都是抽象方法,没有方法体,即如果父类中的方法名相同时就都相同了,就没什么错误了。
不知道你看明白了么?

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
马年出黑马 发表于 2014-4-4 00:03
谢谢,那你的回答正是我想要的!

抽象类不用,普通类必须!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马