抽象类定义
普通类可以直接产生实例化对象,并且在普通类中可以包含构造方法、普通方法、static 方法、常量、变量的内容。而所谓抽象类就是指在普通类的结构里面增加抽象方法的组成部分,抽象方法指的是没有方法体的方法,同时抽象类方法还必须使用abstract关键字定义。拥有抽象方法的类一定属于抽象类,抽象类要使用abstract声明。定义抽象类:abstract class A{ //定义一个抽象类,使用abstract声明 public void fun(){ //普通方法 System.out.println("存在又方法体的方法"); //此方法没有方法体的声明,并且存在abstract关键字,表示抽象方法 public abstract void print(); } }
在本程序的类中定义了一个抽象方法print(),既然类中有抽象方法,那么类就必须定义为抽象类,所以使用了“abstract class”来定义。但是一定要记住:抽象类只是比普通类多了抽象方法的定义,其他结构与普通类完全一样。
注意:抽象类不能直接实例化对象
范例:错误的实例化抽象类的操作。public class TestDemo{ public static void main(String[] args){ A a = new a(); //A是抽象的,无法实例化 } }
如果要想使用抽象类,必须遵守如下原则。1.抽象类必须有子类,即每一个抽象类一定要被子类所继承(使用extends关键字),但是在“java”中每一个子类只能够继承一个抽象类,所以具备单继承局限;2.抽象类的子类(子类不是抽象类)必须覆写抽象类中的全部抽象方法(强制子类覆写);3.依靠对象的向上转型概念,可以通过抽象类的子类完成抽象类的实例化对象操作。
范例:错误的实例化抽象类的操作。abstract class A{ //定义一个抽象类,使用abstract声明 public void fun(){ //普通方法 System.out.println("存在有方法体的方法!"); } //此方法并没有方法体的声明,并且存在abstract关键字,表示抽象方法 public abstract void print(); } //一个子类只能够继承一个抽象类,属于单继承局限 class B extends A{ //B类是抽象类的子类,并且是一个普通类 public void print(){ //强制要求覆写的方法 System.out.println("Hello World !"); } } public class TestDemo{ public static void main(String[] args){ A a = new B(); //向上转型 a.print(); //被子类覆写过的方法 } }
本程序为抽象类定义了一个子类B,而子类B(是一个普通类)必须要覆写抽象类中的全部抽象方法,而在主方法中依靠子类对象的向上转型实现了抽象类A对象的实例化操作,而调用的print()方法由于被子类所覆写,所以最终调用的是在子类B中覆写过的print()方法。