抽象类与接口的区别与联系
抽象类与接口都可以定义一种访问的约束或规则
--------------------------------------------------------------------------------
抽象类多用于在同类事物中有无法具体描述的方法的时候,为了使该同类事物中的该方法能够统一,不致混乱,可将该方法声明为抽象方法,同时则把该类声明为抽象类。
特点:同类事物中,各个子类对该方法的描述不一致,为了便于外界统一访问,则对该方法进行约束。
--------------------------------------------------------------------------------
接口多用于不同类事物之间,定义不同类之间的通信规则。如某资源要访问多个不同的类,为了使该资源能统一进行访问,不致混乱,可以为这些要被访问的类定义一个统一的接口,则该资源就能通过该接口对这些不同的类进行统一的调用。
特点:为不同类的事物,定义一个便于外界统一访问的规则。或者说当不同类事物具有某种相同的功能,并且不同类对该功能的描述不一致时,则可将该功能定义为接口。
--------------------------------------------------------------------------------
举例说明:
抽象类:所有的图形都具有一个求面积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);
}
}
这是我的观点欢迎老鸟指正!