1、抽象类
直接上代码…
// 抽象类
public abstract class Action {
// abstract: 抽象方法,没有方法体,只有方法名
public abstract void run();
public void doSomething(){
System.out.println("doing something...");
}
}
public class Student extends Action {
// 抽象类的抽象方法,继承的子类必须实现其抽象方法
@Override
public void run() {
// 必须重写Action类中的抽象方法
}
}
为什么需要抽象类?
-
在某些情况下,父类知道子类应该包含怎样的方法,但是无法准确知道这些子类如何实现这些方法。例如定义一个Shape类,这个类应该提供一个计算周长的方法,但是不同的Shape子类对周长的计算方法不一样,此时需要用到抽象类。
-
虽然有些情况可以对对象进行强制类型转换,但是这降低了程序的灵活性。
-
使用抽象方法应该满足的要求:抽象方法只有方法的签名,没有方法实现的方法。
2、接口
接口的概念
-
接口是从多个相似类中抽象出来的规范,接口不提供任何方法。接口体现的是规范和实现分离的设计哲学。
-
接口定义了某一批类所需要遵循的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类中必须提供某些方法,提供这些方法的类就可满足实际需要。
直接上代码…
// 定义一个接口,接口都需要有个实现类
public interface UserService {
// 接口中所有的方法都是抽象的 -- public abstract
void add(); // 增
void delete(); // 删
void update(); // 改
void query(); // 查
}
public interface TimeService {
void timer();
}
// 接口的实现类 -- 可以实现多个接口
public class UserServiceImpl implements UserService, TimeService {
// 实现了接口的类,就必须重写接口的所有方法
@Override
public void add() {
}
@Override
public void delete() {
}
@Override
public void update() {
}
@Override
public void query() {
}
@Override
public void timer() {
}
}
3、抽象类与接口的对比
抽象类
- 类 --> abstract
- 方法 --> public abstract
接口
- 接口 --> interface
- 类 --> implements
- 方法 --> public abstract
- 接口不能被实例化,接口中没有构造方法
- implements可以实现多个接口
- 必须要重写接口中的方法