Java 抽象类 abstract
抽象类是指在类中定义方法,但是并不去实现它,而在它的子类中去具体的实现。定义的抽象方法不过是一个方法占位符。继承抽象类的子类必须实现父类的抽象方法,除非子类也被定义成一个抽象类
抽象类定义格式:
修饰符 abstract 类名 { }
抽象类方法定义格式:
修饰符 abstract 返回值类型 方法名();
注意:抽象类中的方法不一定为抽象方法,但是抽象方法所在的类一定要定义为抽象类。
public abstract class Animal { abstract void breath(); } public class Tiger extends Animal { void breath() { System.out.println("老虎用肺呼吸"); } } public class Fish extends Animal { void breath() { System.out.println("鱼用腮呼吸"); } } public class Test { public static void main(String[] args) { Tiger tiger = new Tiger(); Fish fish = new Fish(); tiger.breath(); fish.breath(); } }
定义完抽象类后,就可以使用它。但是抽象类和普通类不同,抽象类不可以实例化,是无法通过编译的,但是可以创建抽象类的对象变量,只是这个变量只能用来指向它的非抽象子类对象。
public static void main(String[] args) { // 抽象类不可实例化,错误 //Animal animal = new Animal(); // 可以创建抽象类的对象来指向非抽象类,正确 Animal animal = new Fish(); animal.breath(); } }
尽管animal 存放的是Fish 对象,但是不能直接调用这些子类中独有的方法,调用独有方法的时候需要进行类型转换。
public class Test { public static void main(String[] args) { Animal animal = new Fish(); animal.breath(); ((Fish) animal).eat(); } }