抽象类和接口的区别
- 成员区别:
抽象类:变量,常量,有构造方法,抽象方法,非抽象方法
接口:常量,抽象方法 - 关系区别:
类和类:继承,单继承
类与接口:实现,可以单实现,可以多实现
接口与接口:继承,单继承,多继承 - 设计层面区别:
抽象类:对事物的抽象,包括属性和行为
接口:对行为抽象,主要是行为
例如:打开一个门会发出报警声音,但不一定所有的门都会发出报警:
抽象类:门,打开和关闭方法
接口:报警器,报警方法
原因:
- 报警器作为接口是因为不一定所有门打开和关闭都会发出报警声音,可以做有无实现接口
- 门作为抽象类是因为一定会有打开和关闭门的操作
图文和代码形式讲解:
图:Alram接口(报警器),Door抽象类(门),DemoImpl(测试类)
Alram(接口)
package CCom.Cnn;
//单独定义一个报警器,是为了避免所有的门未必都会发出声音
public interface Alram {
void alram();//有无发出报警声音
}
Door(抽象类)
package CCom.Cnn;
//打开和关闭在门类
public abstract class Door {
public abstract void open();//打开行为
public abstract void close();//关闭行为
}//门类
DemoImpl(测试类)
package CCom.Cnn;
public class DemoImpl extends Door implements Alram {
@Override
public void open() {
//对门这个事物进行打开行为
}
@Override
public void close() {
//对门这个事物进行关闭行为
}
/*
前者是抽象类,后者是接口
*/
@Override
public void alram() {
//报警器是否发出声音 可有可无(是否实现报警器接口)
}
}