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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱烈葵 中级黑马   /  2012-8-30 09:09  /  2055 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

既然有了接口,为什么还要抽象类呢?

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

5 个回复

倒序浏览
1.接口全部都是抽象方法,必须全部覆盖,而抽象类则只有一部分抽象方法。如果我要定义一个类里面有些方法希望被覆盖,有些方法看情况覆盖,有些方法不希望覆盖(final修饰),接口就不能达到要求了,只有抽象类满足要求。
2.接口允许多实现,而抽象类和一般类一样只能单继承,假如定义一个类,这个类可以实现多个接口,但是只能继承一个抽象类。

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
黑马张旭明 发表于 2012-8-30 09:30
1.接口全部都是抽象方法,必须全部覆盖,而抽象类则只有一部分抽象方法。如果我要定义一个类里面有些方法希 ...

有道理,应该是这样
回复 使用道具 举报
接口和抽象类的区别:
1 抽象类中有抽象方法和非抽象方法,所有当子类继承父类的时候,子类就可以直接把父类中的非抽象方法拿来用,不需要全部复写,就能创建对象
  接口中全都是抽象方法,当子类实现接口时,必须把所有的抽象方法全部复写,才能创建对象进行实例化

既然抽象类那么轻松,那为什么还要接口呢?
2 因为java中不支持多继承,只能单继承,但是,接口可以被类多实现,也是对多继承不支持的转换形式,java支持多实现
  
不支持多继承的原因: 是因为父类当中的方法可能会重复,会导致子类调用此方法会出现问题
而支持多实现的原因: 是因为接口中的方法都是抽象的,没有方法体,可以让子类任意定义

一个类在继承一个类的同时还可以实现多个接口
这样更方便于对程序进行功能扩展
   

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
不是所有的都要用接口而不用抽象类
接口用来定义行为,实现接口的类可以实现这些行为,从而使定义与实现分离
抽象类作为公共的父类,继承它的子类能复用或扩展父类的某些行为或属性

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
声明方法的存在而不去实现它的类被叫做抽象类,它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。
接口是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。

点评

请改成真实姓名  发表于 2012-8-31 17:31
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马