🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 抽象类 在某些情况下,父类中只知道子类中应该包含什么样的方法,但是无法知道其具体的实现内容。 ## 抽象方法和抽象类 抽象方法和抽象类都是使用 abstract 修饰的 - 如果在一个类中定义了抽象方法,那么这个类就是抽象类; - 抽象类是无法实例化的,只能作为父类被继承使用; - 抽象类的构造器只能用于被实现的子类的构造器调用。 > abstract 是不能修饰成员变量的; > 如果方法定义为 static,就不能使用 abstract 修饰符; > 如果方法定义为 private ,也不能使用 abstract 修饰符; 抽象类:Person.java ~~~ package c1103; public abstract class Person { private String name; private String age; private Boolean sex; // private abstract void fun1(); // 错误的 // public abstract static void fun2(); // 错误的 public final void eat() { } // 此方法为抽象方法 public abstract void talk(); public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public Boolean getSex() { return sex; } public void setSex(Boolean sex) { this.sex = sex; } public static void main(String[] args) { // Person p = new Person(); // 错误的 } } ~~~ 实现类:Chinese.java ~~~ public class Chinese extends Person{ @Override public void talk() { System.out.println("我是中国人,我说汉语。"); } } ~~~ ## 抽象类的作用 抽象类体现的是一种模板模式的设计思想,抽象类作为多个子类的通用模板,子类在抽象的基础上进行扩充,但是子类整体上会保留抽象类的行为方法(必须要实现抽象类的抽象方法)。 抽象类一般只是定义需要使用的方法,把不能实现的部分抽象成抽象方法,留给子类去实现。 父类中可以有实现的方法,但是子类也是可以对已经实现的方法进行改造的(override),但是如果在子类中还需要调用父类的实现方法,可以使用 super 关键字。