黑马程序员技术交流社区
标题:
abstract class和interface有什么区别?
[打印本页]
作者:
hunter
时间:
2013-4-3 20:24
标题:
abstract class和interface有什么区别?
abstract class
和
interface
有什么区别
? 蒙了,好像都是可以多态啊
作者:
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实现,只能继承一次;
④接口中的方法都必须是抽象方法,抽象类中可以不定义抽象方法。
类、抽象类、接口之间的关系:
① 类与类之间是继承关系,一个类只能有一个直接父类,可以有多个间接父类
② 类与抽象类之间是继承关系,只能有一个继承。
③ 类与接口之间是实现关系,一个类可以实现多个接口
④ 接口与接口之间是继承关系,并且可以多继承。
定义一个抽象类:
abstract class Demov{//定义一个抽象类
public int x = 8;
public void printa(){//定义一个普通方法
System.out.println("x="+x);
}
abstract void show();//定义一个抽象方法
}
class Subb extends Demov{
public void show(){}//覆写show方法,否则Sub就是一个抽象类,需要用abstract修饰。
}
复制代码
定义一个接口:
interface Iner{
public static final double PI = 3.14;
int NUM = 5;//如果不写public static final,程序会自动加上。
public abstract void show();//定义一个抽象方法
//public void print(){}//错误的,不允许定义非抽象的方法。
}
class Ssu implements Iner{//Ssu类实现了Iner接口。
public void show() {//需要重写show方法,否则Ssu就是一个抽象类。
System.out.println("show......");
}
}
复制代码
作者:
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