为什么实现接口的如果是抽象类,就不用定义接口中的所有抽象方法
- 因为抽象类除了不能实例化对象之外,类的其他功能仍然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能被实例化,所以抽象类必须被继承,才能被使用。通常用abstract修饰。
- 接口是一个抽象类型,是抽象方法的集合,接口用interface修饰。一个类通过实现接口的方式来实现接口的抽象方法。接口不是类,类描述对象的属性和方法,接口则包含类要实现的方法。接口无法被实例化,但是可以被实现。一个类实现接口,就要实现接口内描述的所有抽象方法,否则就必须声明为抽象类。即除非实现接口的类是抽象类,否则该类要实现接口中的所有的抽象方法。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
那么为什么如果是抽象类实现了接口,就不用实现接口中的所有抽象方法
下面用实例解释
首先 接口类 TestDao.java
public interface TestDao {
public String getAll();
public boolean getOne();
public double getDouble();
public int getInt();
}
接着是实现接口的抽象类,下图在编译的过程中没有实现接口中的抽象方法,也没报编译错误。
接着我们看继承抽象类的子类,从下图可以看出,是要子类实现接口中的所有抽象方法
下图可以看出 确实是子类实现了接口的所有抽象方法之后,编译正常进行
注意,我们在上诉抽象类中实现接口中的某个方法,再看下是什么情况。如下图在抽象类中实现了某个方法
然后我们再去子类中看一下什么情况,结果如下图,没有变化。这里我们可以看出,即使我们在上诉实现接口的抽象类中实现了接口中的抽象方法。那在继承该抽象类的子类中也是可以继续实现接口中的抽象方法的,甚至是将抽象类中实现的内容覆盖。
那么我们将继承该抽象类的子类里的所有方法删除掉,再重新Alt+Enter一次,看看什么结果。发现此时类中要实现的接口中的方法少了实现接口的抽象类中实现的方法。这种情况,我们可以根据具体的需求来灵活使用。