抽象类和接口的区别
从语法定义看:
使用 abstract class方式定义的抽象类例子:
abstract class class1 {
abstract void method1();
abstract void method2();
}
使用 interface 方式定义的例子:
interface class1 {
void method1();
void method2();
}
abstratc 方式,可以有自己的数据成员,也可以有非abstract的额成员方法,即使是全部不是abstract也没事,但是在interface中,只能由静态的不能改变的成员变量,即static final x,所有的成员方法都是默认abstract的,所以interface其实是另一种方式的abstract
从编程层面看
abstratc 只能被继承,在Java中,一个类只能继承一个类,interface 接口可以被实现多个,
从设计理念看
abstract 代表了 is a,interface 代表了like a,所以abstract 与其子类应该是概念相同的,interface 与其实现的类不一定是概念相同的,接口描述了实现类所需要的功能,比如人和动物都有吃饭的方法,那么这时候就应该用接口来定义,但是人,和学生都有的说话方法,这时候就可以在定义一个抽象人,学生类继承抽象人之后就有了说话的方法