当定义一个类时,需要定义一些方法来描述该类的行为特征,但有时这些方法的实现方式是无法确定的,比如定义动物Animal类时,shout()方法是用来表示动物的叫声,但是针对不同的动物,叫声当然也不同,所以shout()方法中无法准确的描述动物的叫声。
针对上述情况,java允许在定义方法时不写方法体*,而这种不包含方法体的方法为抽象方法,抽象方法必须用abstract关键字来修饰:
注1 方法体:abstract void shout(){}........{}里就是方法体,如果没有{}就没方法体,有{}但里面没内容,则表示方法体为空,但有方法体,shout是方法名,方法体即为方法的内容。没有方法体的方法是需要你去实现的,空方法体的方法是需要你去覆盖的。
。
。
。
。
。
需要注意的是,抽象类是不可以被实例化的,因为抽象类中有可能包含抽象方法,而抽象方法是没有方法体的,不可以被调用,如下图,如果直接调用抽象类中定义的方法,就会报错:
。
。
。
。
。
所以当我们想调用抽象类中定义的方法时,必须先创建一个子类,来继承抽象类的方法,这是需要使用extends,在子类中将抽象类的抽象方法进行实现,如下图: