- 抽象类特点
- 案例
Java 中抽象类值的是用 abstract 关键字修饰的类。
抽象类特点- 抽象类和抽象方法都必须使用 abstract 关键字修饰;
- 抽象类也可以有成员变量(变量,常量);
- 抽象类不可实例化,唯一作用是被继承,利用高层抽象类引用指向子类,避免直接引用实际子类;
- 抽象方法没有方法体(即没有大括号以及里面的内容);
- 类中包含抽象方法则必须声明为抽象类,类中不包含抽象方法也可以声明为抽象类;
- 抽象类中也可以包含非抽象方法(提高代码复用性);
- 子类必须重写父抽象类中所有抽象方法,否则该子类也需声明为抽象类(强迫子类实现所有抽象方法实际上定义了子类编写规范);
- 虽然抽象类不可实例化,但其也具有构造方法,也可自定义带参构造方法,抽象类中的构造方法只用于子类访问父类数据的初始化;
首先定义一个抽象类 Animal:
public abstract class Animal {
private String gender;
private int age;
// 抽象类不可实例化,但也有构造方法
public Animal() {
System.out.println("This is super class");
}
public Animal(String gender, int age) {
this.gender = gender;
this.age = age;
}
// 抽象类可包含非抽象方法
public void setGender(String gender) {
this.gender = gender;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public int getAge() {
return age;
}
public abstract void run();
public abstract void eat();
public abstract void sleep();
}
定义一个子类 Tiger 继承 Animal 类,Tiger 不是抽象类,所以其必须实现 Animal 中的所有抽象方法:
public class Tiger extends Animal{
public Tiger() {
System.out.println("This subclass Tiger");
}
public Tiger(String gender, int age) {
super(gender, age);
}
// 重写 Animal 类中所有抽象方法
@Override
public void run() {
System.out.println("Tiger is running");
}
@Override
public void eat() {
System.out.println("Tiger is eating");
}
@Override
public void sleep() {
System.out.println("Tiger is sleeping");
}
}
定义测试类:
public class AbstractClassDemo {
public static void main(String[] args) {
Tiger t = new Tiger();
t.setGender("male");
t.setAge(6);
System.out.println("Gender: " + t.getGender() + " Age: " + t.getAge());
t.run();
}
}
运行结果:
This is super class This subclass Tiger Gender: male Age: 6 Tiger is running



