Java中有了抽象类为什么还有接口这个概念?
一、抽象类
先来说一下抽象类,首先他是一个要被abstract修饰的类,同理被abstract修饰的方法叫抽象方法。抽象类一定要被继承,然后重写里面的抽象方法的,因为是继承,所以肯定是单继承。
public abstract class A {
public abstract void think();
}
public class Demo extends A{
@Override
public void think() {
}
}
-
上面就是抽象类的常规形式了,那么它有何作用呢?这是一个问题,其实啊,引入这个概念是和实际开发中息息相关的,有的时候我们写一个功能,非常复杂,而且可能还会修改,这个时候我们就不能固定去写,这个时候把一些东西抽象出来,然后用对应开发再去实现相关的业务,这个时候抽象类就起到关键作用了。
-
使用抽象类要注意的几点:
- 抽象类中可以有普通方法
- 抽象方法必须是在抽象类中
- 抽象类被继承后抽象类中的抽象方法必须被实现
- 抽象类是不能被new 的,只能通过子类去调用
二、接口
接口的格式是被interface修饰的,不是用class修饰的,接口也是抽象的,使用方法和抽象类有点类似,那为什么要用接口呢?
public interface Test {
void delete(String name);
}
public interface Test001 {
void update(String name);
}
public class ITestImpl implements Test, Test001 {
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
}
上面可以看出来吧,我们居然实现了两个接口,好像C++里面的 多继承,这也是为什么接口会出现啊,这里解决了抽象类的痛点,因为java都是单继承,不能实现多继承,接口刚好可以弥补,实现了一个**“伪多继承”**。实际开发项目都是基于接口来设计的,后面开发会大量与接口打交道。
接口的注意点:
- 接口中只能有些方法,不能实现
- 接口中的方法是public的,这个可以省略不写