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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尚新泽 中级黑马   /  2015-8-16 22:40  /  6616 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

3黑马币
谁能详细说一下接口与抽象类的区别呢?  什么时候用接口,什么时候用抽象类.请详细说明不要太官方了.来个通俗易懂的.

最佳答案

查看完整内容

简单来说 抽象类是从子类中抽取了基本共性, 包括了所有子类都必须具有的基本功能, 接口提供了额外的扩展功能 不是所有子类都必须具有 但如果部分子类需要有,那么可以通过 implements接口来实现 下面不是代码 只是简单举个例子 abstract class Employee //员工都有必须工作的基本功能 --abstract void work(); interface Smoking --void smoke(); interface Chating --void chating(); 工人,经理,文员都具有工 ...

30 个回复

倒序浏览
本帖最后由 sunsteam 于 2015-8-17 11:03 编辑

简单来说  抽象类是从子类中抽取了基本共性, 包括了所有子类都必须具有的基本功能,

接口提供了额外的扩展功能  不是所有子类都必须具有  但如果部分子类需要有,那么可以通过       implements接口来实现  下面不是代码  只是简单举个例子


abstract class Employee  //员工都有必须工作的基本功能
--abstract void work();

interface Smoking
--void smoke();

interface Chating
--void chating();   

工人,经理,文员都具有工作的基本功能, 但他们具有一些额外的扩展功能. 如工人和经理都抽烟,但文员不抽烟.  文员和经理都爱聊天, 而工人不喜欢高谈阔论  那么就通过分别实现不同接口来达成. 这就是单继承多实现

class Worker extends Employee  implements Smoking
-- void work(){工人的工作}
-- public void smoke(){抽利群牌烟}

class Manger extends Employee implements Smoking, Chating
-- void work(){经理的工作}
-- public void smoke(){抽中华牌烟}
-- public void chating(){聊工作内容}

class Clerk extends Employee implements Chating
-- void work{文员的工作}
-- public void chating(){聊八卦}
回复 使用道具 举报
怎么都没人回答/////
回复 使用道具 举报
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识【里面没有任何方法,比如Remote接口】和数据共享【里面的变量全是常量】的作用.
回复 使用道具 举报
接口里面是抽象的,类是具体的。
回复 使用道具 举报
 抽象类与接口紧密相关,它们不能实例化,并且常常部分实现或根本不实现。抽象类和接口之间的一个主要差别是:类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承。从抽象类派生的类仍可实现接口。可以在创建组件时使用抽象类,因为它们使您得以在某些方法中指定不变级功能,但直到需要该类的特定实现之后才实现其他方法。抽象类也制定版本,因为如果在派生类中需要附加功能,则可以将其添加到基类而不中断代码。

  在实现抽象类时,必须实现该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值。
  抽象类不能被实例化,也就是不能用new关键字去产生对象
  抽象方法只需声明,而不需实现
  抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是个抽象类.
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。必须重写所有方法
抽象类只能单继承,接口能多实现
回复 使用道具 举报
简单的来说,接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
回复 使用道具 举报
接口的所有属性和行为都是抽象的,没有构造方法。
抽象类,可以有成员变量,成员常量;有构造方法;有成员方法,抽象的和非抽象的。
回复 使用道具 举报
接口就像电脑的usb端口,可以用来扩展功能,比如插个鼠标,也就可以实现鼠标功能,插个音响就能放音乐的功能
抽象类是描述不清的就像水果,动物,比较宽泛,如果别人管你要个水果,你并不知道是什么,所以抽象类不能创建对象,但是你知道他的子类比如苹果,所以可以利用多态创建子类对象
三个方面有区别,
1,成员变量:接口都是常量,抽象类有常量也有变量,
2构造方法,接口没有,抽象类有
3成员方法,接口全是抽象的,抽象类成员方法可以是抽象的也可以不是抽象的
接口使用:比如一个我只需要一个类增加功能,那么就可以实现这个接口,可以多实现,就像可以多扩展点功能,有点像干爹,你可以不像你的干爹,其实你可以像你干爹学到东西,各种功能,也可以有很多干爹
抽象类:有子类is  a父类的关系,其实就是无法创建对象,很多东西描述不清,好比,我的父亲小时候就不再身边,记不清了,但是我还是很像我的父亲,我有一些天赋,我也只能有一个亲父亲
回复 使用道具 举报
接口是功能的扩展,比如说,猫狗,人(没有父子类的关系)都是可以跳这个动作的,这个时候就可以用接口,接口中都是抽象方法。
抽象类的抽象方法是被子类继承的,也可以说是子类的共性提取方法
回复 使用道具 举报
抽象类的成员可以具有访问级别,而接口的成员全部public级别 抽象类可以包含字段,而接口不可以, 抽象类可以继承接口,而接口不能继承抽象类 抽象类的成员可以具有具体实现,而接口不行 抽象的子类可以选择性实现其基类的抽象方法,而接口的子类必须实现
回复 使用道具 举报
接口就是方法都是抽象的,这个时候用。如果是抽象类,方法不都是抽象的。
回复 使用道具 举报
接口:like a
抽象类:is a
向框架方面理解理解
回复 使用道具 举报
抽象类是创建的“内”引用,接口是”外“引用
回复 使用道具 举报
接口的所有属性和行为都是抽象的,没有构造方法。
抽象类,可以有成员变量,成员常量;有构造方法;有成员方法,抽象的和非抽象的
回复 使用道具 举报
唯一的区别在于,接口必须要之类复写,而抽象类不一定需要子类复写,抽象类几乎用不着,接口在方法回调时候用到比较多。我是42期学员,已经工作8个太月
回复 使用道具 举报
接口的使用与抽象类类似,不能直接使用,需要创建子类对象,然后通过子类对象调用成员方法和成员变量。比抽象更抽象
回复 使用道具 举报
他们都说的挺好的,我简单概括一下吧:

java的数据类型有八种基本类型和三大引用类型,其实中数组,类,和借口就是这三种引用类型。
那么抽象类和接口有哪些异同:
1、接口中所有的方法隐含的都是抽象的,而抽象类则可以同时包含抽象和非抽象的方法。

2、类可以实现很多个接口,但是只能继承一个抽象类。

3、类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。

4、抽象类可以在不提供接口方法实现的情况下实现接口。这句话的意思是说,抽象类实现接口时,接口中定义的抽象方法,不需要复写到抽象类中,这个很好理解,抽象类中定义抽象方法,而接口中都是抽象方法,都需要由继承他们的类去实现其中的抽象方法。所以抽象类可以不复写接口中的方法,但是继承抽象类的子类一定要实现接口中的方法。

5、接口中声明的变量默认都是final的。抽象类可以包含非final的变量。也就是说接口中的变量其实就是常量,而抽象类可以定义成员变量。

6、接口中的成员函数默认是public修饰符。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。

抽象类和接口的用法
抽象类:如果将一个类声明为abstract,此类不能生成对象,只能被继承使用。抽象类中可以有一般的变量和一般的方法。子类继承抽象类必须实现其中抽象方法,除非子类为抽象类。  private void print(){};此语句表示方法的空实现。 abstract void print(); 此语句表示方法的抽象,无实现。
抽象类的用法:一般多态的应用比较多。

接口:因为java不支持多继承所以就出现了接口,接口不能实现另一个接口,但可以继承多个接口。接口里面的成员变量默认都是public static final类型的,即使static漏写了,也是会被默认添加上的,接口里面的方法默认都是public abstract类型的。接口没由构造器不能被实例化。
视频里毕老师讲接口解释为规则,我认为这种比喻比较贴切。类是又来描述某一类事物,可以说是抽取某写事物的共同特点的产物,我们得到一个类,给他添加特有的数据就成了实例对象了。那么至于规则(接口)又怎么理解呢?我们以接力赛为例。一群运动员要参加比赛,我们可以把各个国家的运动会代表队看成类的对象,如果想参加接力赛就要遵守接力赛的规则:每组四个人,每个人都擅长短跑,每个人一圈,还要有接力棒。具备这些条件就能参赛了,如果少一个人或者没有接力棒就不能参赛了,除非实现了这个接口,在项目中如果要某些类型参与到某些类运算当中而又不能采用继承的方式使其满足条件,就可以考虑定义借口了。我个人在开发中看到很多程序在接口中定义大量常量,这样可以实现数据共享,避免就重复声明相同的数据啦!

回复 使用道具 举报

(1): 成员区别
       
        抽象类:
                成员变量:        可以是变量也可以是常量
                构造方法:        有构造方法
                成员方法:        可以是抽象方法,也可以是非抽象方法
        接口:
                成员变量:        只能是常量 ,存在默认的修饰符: public static final
                构造方法:        没有构造方法
                成员方法:        只能是抽象方法, 存在默认的修饰符: public abstract
(2): 关系区别:
       
        类与类:                继承关系, 只能是单继承 , 不能是多继承,但是可以是多层继承
        类与接口:        实现关系, 可以是单实现,也可以是多实现,并且一个类可以继承一个类的同时去实现多个接口
        接口与接口:        继承关系  可以是单继承也可以是多继承

(3): 设计理念
       
        抽象类                体现的关系"is a"                抽象类中定义的是该继承体系的共性功能。
        接口                体现的关系"like a"                接口中定义的是该继承体系的扩展功能。
回复 使用道具 举报
接口就是一个抽象类吧,
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马