黑马程序员技术交流社区

标题: abstract class和interface有什么区别? [打印本页]

作者: hunter    时间: 2013-4-3 20:24
标题: abstract class和interface有什么区别?
abstract classinterface有什么区别? 蒙了,好像都是可以多态啊

作者: guobin_lu    时间: 2013-4-3 20:24
都不能被直接实例化,都可以通过继承实现其抽象方法。
不同点:
接口支持多继承;抽象类不能实现多继承。
接口只能定义行为;抽象类既可以定义行为,还可能提供实现。
接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;
抽象类可以定义字段、属性、包含有实现的方法。  
接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

作者: 程媛媛    时间: 2013-4-3 20:41
本帖最后由 程媛媛 于 2013-4-3 20:43 编辑

抽象类与接口的相同点:都不可以创建对象。
抽象类与接口的不同点:
①接口中的方法都必须是抽象的,抽象类中的方法可以不是抽象的;
②接口中定义的变量都是常量,抽象类中可以不定义常量;
③接口通过implements实现,可以多实现,抽象类通过extends实现,只能继承一次;
④接口中的方法都必须是抽象方法,抽象类中可以不定义抽象方法。
类、抽象类、接口之间的关系:
① 类与类之间是继承关系,一个类只能有一个直接父类,可以有多个间接父类
② 类与抽象类之间是继承关系,只能有一个继承。
③ 类与接口之间是实现关系,一个类可以实现多个接口
④ 接口与接口之间是继承关系,并且可以多继承。
定义一个抽象类:
  1. abstract class Demov{//定义一个抽象类
  2.         public int x = 8;
  3.         public void printa(){//定义一个普通方法
  4.                 System.out.println("x="+x);
  5.         }
  6.         abstract void show();//定义一个抽象方法
  7. }
  8. class Subb extends Demov{
  9.         public void show(){}//覆写show方法,否则Sub就是一个抽象类,需要用abstract修饰。
  10. }
复制代码
定义一个接口:
  1. interface Iner{
  2.         public static final double PI = 3.14;
  3.         int NUM = 5;//如果不写public static final,程序会自动加上。
  4.         public abstract void show();//定义一个抽象方法
  5.         //public void print(){}//错误的,不允许定义非抽象的方法。
  6. }
  7. class Ssu implements Iner{//Ssu类实现了Iner接口。
  8.         public void show() {//需要重写show方法,否则Ssu就是一个抽象类。
  9.                 System.out.println("show......");
  10.         }
  11. }
复制代码

作者: DWC_5101    时间: 2013-4-3 21:22
它们有以下区别:
a. interface中不能有字段,abstract class则可以;
b. interface可以被多重继承(即可以被多个具体类实现),abstract class则不可以;
c. interface中不可能有任何成员方法被实现,abstract class则可以。事实上,一个类中只要有一个成员方法是
  abstract的,那么这个类就一定是abstract class,abstract class中可以有非abstract的方法;
作者: 杞文明    时间: 2013-4-4 00:47
实现多态有三种方法
1、虚方法
2、抽象类
3、接口




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