版权声明:欢迎转载 https://blog.csdn.net/qq_37875585/article/details/88104005
抽象类和抽象方法
抽象(abstract)类
- 使用 abstract 声明的类是抽象类,抽象类不能直接实例化,只能被继承。
- 软件中作为父类使用的“半成品”类,在逻辑上不应该直接实例化。
- Java提供了 abstract 关键字,实现在语法层面限制一个类,避免实例化。
- 软件的编写者,在团队协作时候,利用abstract限制类的实例化,可以使合作者避免不必要的错误。
- 何时使用:一般情况下,作为半成品的父类,建议定义为抽象类。
抽象方法
使用 abstract 关键字声明方法:
- 方法不能有方法体
- 包含抽象方法的类必须声明为 抽象类
- 子类继承抽象类时候,必须实现(重写)父类中声明抽象方法。
- 为何使用抽象方法,将子类方法泛化到父类时候,如果每个子类的具体方法体都不一样的时候,建议将方法签名抽象到父类中,定义为抽象方法。
抽象类可以作为父类声明变量
-
抽象类可以作为父类声明变量,只能引用子类的实例,这样就可以统一使用父类型变量管理子类型实例。
-
案例:
public class Demo01 { public static void main(String[] args) { /* * 抽象类:只能被继承,不能实例化 */ //Person p = new Person(); //抽象类不能创建对象 Student s = new Student(); Teacher t = new Teacher(); s.who(); t.who(); Person p = s; //这是创建Person数组对象,不是创建Person对象 //如下代码表示了一群人中包括一个老师和一个学生 Person[] persons = new Person[2]; persons[0]=s; persons[1]=t; //可以利用数组和for循环统一处理数据或方法 for(int i=0; i<persons.length; i++) { persons[i].who(); } } }
//作为半成品的父类,建议定义为抽象类 abstract class Person{ String name; int age; //抽象方法:使用abstract声明方法,不能写方法体 public abstract void who(); }
class Student extends Person{ public void who() { System.out.println("我是学生"); } }
class Teacher extends Person{ public void who() { System.out.println("我是老师"); } }