1.抽象类肯定可以实现接口;
2.这不是有没有意义的事情,是一种思想,当你自己写的类想用接口中个别方法的时候(注意不是所有的方法),那么你就可以用一个抽象类先实现这个接口(方法体中为空),然后再用你的类继承这个抽象类,这样就可以达到你的目的了,如果你直接用类实现接口,那是所有方法都必须实现的;
3.这种思想在java.swing.event包中运用的非常多,里面一般以Adapter为后缀的都是抽象类,它们都实现了特定的事件接口,大家可以看看。
4.抽象类定义在接口与真正的实现类之间有一个重要的作用,就是过滤掉一些不需由真正的实现类重写的方法。举一个例子,譬如说HttpServlet这个抽象类类中有init(),doGet(),doPost(),destroy()等方法,但是真正要让程序员实现的只有doGet(),doPost(),就是因为HttpServlet中定义了对一些方法的默认实现,这样一个类在扩展它时,就不必重写所有HttpServlet或者其父类所实现的所有接口的所有方法。经常是这样,即使我们重写init()方法,也只是调用super.init().
举个例子
“桌子”是一个 interface,它要有一个桌面能用来摆放东西。
“圆桌”是“桌子”的 abstract class,它定义了桌面是圆的。
“正圆桌”继承自“圆桌”,它的桌面是圆形中的正圆。
“椭圆桌”继承自“圆桌”,它的桌面是圆形中的椭圆。
在Java中,如果抛开 Object 类,那么 Interface 就是最高层次的抽象,其次是 abstract class,接下来是 class,最后是程序运行的时候产生的对象。
“桌子”是一个 interface,它要有一个桌面能用来摆放东西。
“圆桌”是“桌子”的 abstract class,它定义了桌面是圆的。
“正圆桌”继承自“圆桌”,它的桌面是圆形中的正圆。
“椭圆桌”继承自“圆桌”,它的桌面是圆形中的椭圆。
在Java中,如果抛开 Object 类,那么 Interface 就是最高层次的抽象,其次是 abstract class,接下来是 class,最后是程序运行的时候产生的对象。