抽象类与接口的区别与联系

programmer_xiaojun 2010-05-02 06:47:20
抽象类与接口都可以定义一种访问的约束或规则


--------------------------------------------------------------------------------

抽象类多用于在同类事物中有无法具体描述的方法的时候,为了使该同类事物中的该方法能够统一,不致混乱,可将该方法声明为抽象方法,同时则把该类声明为抽象类。

特点:同类事物中,各个子类对该方法的描述不一致,为了便于外界统一访问,则对该方法进行约束。


--------------------------------------------------------------------------------

接口多用于不同类事物之间,定义不同类之间的通信规则。如某资源要访问多个不同的类,为了使该资源能统一进行访问,不致混乱,可以为这些要被访问的类定义一个统一的接口,则该资源就能通过该接口对这些不同的类进行统一的调用。

特点:为不同类的事物,定义一个便于外界统一访问的规则。或者说当不同类事物具有某种相同的功能,并且不同类对该功能的描述不一致时,则可将该功能定义为接口。


--------------------------------------------------------------------------------

举例说明:

抽象类:所有的图形都具有一个求面积getArea()的方法,但是每个图形都有不同的描述,为了使外界(Outside)能统一访问该方法,则将该方法声明为抽象方法,并且包含在一个抽象类Shape中,并使其他的具体的图形类继承这个抽象类。

abstract class Shape {
abstract int getArea();
}

class Circle extends Shape {
public int getArea() {
//具体的实现
}
}

public class Outside {
public static void access(Shape object) {
object.getArea();
}

public static void main(String[] args) {
Circle c = new Circle();
access(c);
}
}

abstract class Shape {
abstract int getArea();
}

class Circle extends Shape {
public int getArea() {
//具体的实现
}
}

public class Outside {
public static void access(Shape object) {
object.getArea();
}

public static void main(String[] args) {
Circle c = new Circle();
access(c);
}
}

接口:电脑(资源)要访问mp3的存储器,U盘的存储器一起其他的一些外设的存储器(不同类的事物)。为了使电脑能统一访问,则定义一个接口(Storage),使要被访问的不同类型的存储器实现这个接口,这样电脑就可以统一调用了。也可以说是,不同的类型的存储器都有存储的功能,为了使外界(电脑),能够统一访问则建立一个接口,让不同类型的存储器都来实现这个接口,外界则通过接口调用。

interface Storage {
void store();
}

class Mp3 implements Storage {
public void store() {
//Mp3的存储规则
}
}

class UDisk implements Storage {
public void store() {
//U盘的存储规则
}
}

public class Computer {
public static void access(Storage object) {
object.store();
//具体实现
}

public static void main(String[] args) {
Mp3 m = new Mp3();
UDisk ud = new UDisk();
access(m);
access(ud);
}
}

这是我的观点欢迎老鸟指正!
...全文
144 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxy15329 2010-05-03
  • 打赏
  • 举报
回复
利用接口可以实现多重继承的功能,抽象类只能实现单继承
winwjt 2010-05-02
  • 打赏
  • 举报
回复
学习,接口是抽象方法的集合
chenhuaike 2010-05-02
  • 打赏
  • 举报
回复
1:接口的所有方法都是抽象的,而抽象类可以定义带有方法体的方法;
2:一个类能够实现多个接口,而只能继承一个抽象类;
3:接口不是类,而抽象类属于类,含有构造方法(虽然都没有用)。
txg0426 2010-05-02
  • 打赏
  • 举报
回复
顶一下。。。
jokerdx 2010-05-02
  • 打赏
  • 举报
回复
帮顶~~~~~~~~~~~~~~~~~~~~~~~
tpshowcom 2010-05-02
  • 打赏
  • 举报
回复
理解的不错,没什么可纠正的...
捏造的信仰 2010-05-02
  • 打赏
  • 举报
回复
1、凡是用抽象类的地方实际上都可以用接口。
2、凡是要抽象的地方首先考虑用接口。
3、接口用得不爽,再考虑用抽象类。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧