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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马---邢志伟 初级黑马   /  2012-6-17 14:08  /  1708 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口和抽象类有点相像,,,不知道他们之间有什么样的区别。。。概念比较模糊。。。

8 个回复

倒序浏览

抽象类和接口异同:
相同:
1,都可以在内部定义抽象方法。
2,通常都在顶层。
3,都不可以实例化,都需要子类来实现。

不同点:
1,抽象类中可以定义抽象方法和非抽象方法,
        而接口中只能定义抽象方法。
2,接口的出现可以多实现。
        抽象类只能单继承。
        也就是说:接口的出现避免了单继承的局限性。
3,继承和实现的关系不一致。继承:is a,实现:like a
综上所述:
如果你想定义的方法全部都是抽象方法那么用接口,否则用抽象类.
而且接口可以多实现,对类的单继承进行了改良.
其实各有利弊,看自己权衡.

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刚好我前几天总结了下:
说简单点接口就是一种特殊的抽象类。当然他们两个还是还是有很大的区别哦。下面就做一个简单的概括。
1.定义格式的不同
抽象类定义格式是:
public abstact class Demo
{
abstact void method1();
abstact void method1();
}

接口定义格式:
public interface Demo
{
void method1();
void method2();
}

2.就是使用的方式也不一样
抽象类通过继承方式使用,当然一个类只能继承一个类。
public slass A extends 抽象类{//实现所有抽象方法}
而接口通过实现方式使用,一个类可以实现多个接口 public class A extends 接口1,接口2..{//实现所有接口的声明}
3.还有设计理念也是不同
有时候他们两者是可以相互替换的,但抽象类与接口两者的设计理念有着很大的不同。
抽象类用于继承:is a 的关系
接口用于实现:like a关系
回复 使用道具 举报
从表象上来说,抽象类可以给出一些成员的实现,接口却不包含成员的实现,抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽象类,但可以实现多个接口。
我们可以从以下三点区分抽象类和接口:
1.        类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。
2.        如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类
3.        从设计角度来看,抽象类是从子类中发现了公共的东西,泛化出了父类,然后子类继承父类。而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义。
回复 使用道具 举报
区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。

区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。

区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。

区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。
              接口              抽象类

多继承       支持               不支持

类型限制      没有               有,只能是引用类型

方法实现  继承类型中必须给出方法实现            继承类中可以不给出

扩展性    比较麻烦         相对比较灵活

多层继承  比较麻烦,需要借助虚函数         比较灵活

回复 使用道具 举报
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
回复 使用道具 举报
刘笑 中级黑马 2012-6-18 09:20:15
7#
抽象类:
              1) 抽象方法,只有行为的概念,没有具体的行为实现。
           使用:abstract 关键字修饰,并且没有方法体。
               2) 包含抽象方法的类,就一定是抽象类。
           使用: abstract 关键字修饰,包含抽象方法。
           3) 抽象类不能直接创建实例。可以定义引用变量。
          4) 抽象类只能被继承,一个具体类继承一个抽象类,必须实
   现所有抽象方法。  
         5) 抽象方法和抽象类非常适合作为系统的分析和设计的工具。
接口:
1 接口:全部的方法都是抽象方法,全部的属性都是常量。
   接口用来表示纯抽象概念,没有任何具体的方法和属性。
2 不能实例化,可以定义变量。
3 接口变量可以引用具体实现类的实例。
4 接口只能被实现(继承),一个具体类实现接口,必须使用全部的
   抽象方法。
5 接口之间可以继承。
6 一个具体类可以实现多个接口,实现多继承现象,表示:
7 接口中的属性,默认是常量 public static final
8 接中的方法一定是:public abstract
9 实现一个接口,使用关键字implements, 实现实际上是
   一种继承关系。接口和实现类是父子类型的关系
回复 使用道具 举报
本帖最后由 rslheima 于 2012-6-18 09:47 编辑

自己总结的,如有不全请见谅!
抽象类

接口

可以有0个或n个抽象方法
都是抽象方法
可以有非抽象方法
没有非抽象方法
数据成员修饰符非private
数据成员默认都是final staticpublic final static修饰,即常量
抽象类与类之间用extends实现继承
接口之间用extends实现继承,类和接口之间用
implements实现(类implements接口)
子类只能继承一个抽象类
子类能实现多个接口
普通子类必须实现父类所有抽象方法
不能创建对象,创建对象由子类完成

回复 使用道具 举报
1.声明方法的存在而不去实现它的类被叫做抽象类;接口(interface)是抽象类的变体,相当于某个功能。
2.接口是公开的,不能实例化,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
3.抽象类只能被继承。
4.一个具体类可以实现多个接口,实现多继承现象,抽象类只能是单继承。

举例看哈抽象类和接口。
abstract class Fruit{       //水果就是一个抽象类。。。                                                
  public abstract void eated() ;
}
class Apple extends Fruit{
  public void eated(){
  System.out.println("吃苹果") ;
  }
}
public class Test{
  public static void main(String[] args){
  new Apple().eated() ;
   }
}



interface Eated{             ///苹果被吃,这是一种功能的体现,可以定义为一个接口。
  public abstract void eated() ;
}
class Apple implements Eated{
  public void eated(){
  System.out.println("吃苹果") ;
  }
}
public class Test{
  public static void main(String[] args){
  new Apple().eated() ;
  }
}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马