实现方式 | 成员变量 | 构造函数 | 普通方法体 | 设计模式 | |
抽象类 | 只能靠单继承 | 普通成员变量 | 可以有 | 可以 | 对一类的抽象 |
接口 | 多实现 | 静态常量(public final static) | 不可以有 | 不可以(1.8之后也可用default) | 对行为的抽象 |
举例一种场景:动物都会吃饭和跑步,自然可以把动物做成一个抽象类,
如果是一个狗又会唱歌又会跳舞。
怎么创建
public abstract class Animal {
public abstract void eat();
public abstract void run();
}
public interface Action {
void sing();
void dance();
}
public class Dog extends Animal implements Action {
@Override
public void eat() {
}
@Override
public void run() {
}
@Override
public void dance() {
}
@Override
public void sing() {
}
}
再假设这只狗只会跳舞不会唱歌怎么办?(在抽象类里重写接口的方法,再用一个子类去继承抽象类)
public abstract class Animal implements Action{
public abstract void eat();
public abstract void run();
@Override
public void sing() {
}
@Override
public void dance() {
}
}
这样的话 这个不会唱歌的狗没必要非得重写唱歌的方法
public class Dog extends Animal {
@Override
public void eat() {
}
@Override
public void run() {
}
@Override
public void dance() {
}
}