首先来看代码:
package abstractExample;
public abstract class AbstractClass { //抽象类
public void method1 () {
System.out.println("This is the first method");
}
public abstract void method2 (); //抽象方法,这个抽象方法不能有body体。
}
package abstractExample;
public class SubAbstractClass extends AbstractClass { //子类
@Override
public void method2() {
System.out.println("Override the Second method!");
}
// public void method1 () {
// System.out.println("Override the first method!");
// }
}
package abstractExample;
public class AbstractTest {
public static void main(String[] args) {
SubAbstractClass ab = new SubAbstractClass();
ab.method1();
ab.method2();
}
}
以下根据代码来总结一下:
1.类中有抽象方法,这个类也必须是抽象类;
如果不是抽象类,会报错。反之,一个抽象类里可能有抽象类,也可能没有抽象类。
2.抽象类不能有实体;
加上方法体,同样会报错。
3.不能实例化抽象类;
这么写同样报错。
4.子类必须实现抽象方法;
这个的前提条件是子类不是抽象类型的,当子类也是抽象类型的时候,可以不用实现超类的所有方法:
5.abstract关键字不能应用于static、private或final方法,因为这些方法不能被重写。
6.其实这次的代码看着很眼熟。。。貌似是设计模式中的模板模式。。。。
其实抛开设计模式,在很多源码中都应用到抽象类,举个栗子,ClassPathXmlApplication的流程中:
有很多抽象方法,其实只知道abstract正确使用方式还是不足够的,还必须知道abstract的作用,在什么场合使用。