抽象方法:只有方法名、参数表和返回值,没有方法体。
既然抽象方法没有方法体,那么也就不能被执行。如果某个类含有抽象方法,那么这个类必须定义为抽象类,即在类定义前用关键字abstract修饰。
但需要注意,一个抽象类可以没有抽象方法。
抽象类没有具体的对象。
通常定义抽象类的对象引用指向它子类的对象。
注意:抽象方法和抽象类
1抽象类不可以创建对象
2包含抽象方法的类必须被声明为抽象类
3抽象类中可以包含非抽象方法和抽象方法,但不一定包含抽象方法
abstract class Animal{
int age;
Animal(int a){
age=a;
}
int getAge(){
return age;
}
abstract void speak();//抽象方法
}
class Cat extends Animal{
Cat(int a ){
super(a);
}
void speak(){ //覆写抽象方法speak()
System.out.println("Cat speaking");
}
}
class Bird extends Animal{
Bird(int a ){
super(a);
}
void speak(){
System.out.println("Bird speaking");
}
}
public class AnimalDemo {
static void makeSpeak(Animal a){
a.speak();//多态,调用哪个speak()方法由a所引用的对象决定
}
public static void main(String args[]){
Cat c=new Cat(3);
Bird b=new Bird(2);
makeSpeak(c);
makeSpeak(b);
}
}
程序运行结果:
Cat speaking
Bird speaking
结果说明:
虽然抽象类不能创建对象,但可以像普通类那样用作变量的类型,如makeSpeak()方法的参数a。在makeSpeak()中通过动态绑定执行相应的speak()方法。
若一个子类未实现父类中的抽象方法,这个子类也是抽象类,必须用关键字abstract修饰。因为不能创建抽象类的对象,所以抽象类保证了其所有子类若可以实例化,必须实现抽象类中声明的抽象方法。
静态方法、私有方法和final修饰的方法是不能被覆写的,因此这三类方法不能被定义为抽象方法。