一、什么是抽象类:
抽象(Abstract)是Java面对对象编程(OOP)中很重要的一个概念。在继承关系中,有时父类从逻辑上自己本身不能被实例化(下面会有例子),就可以创建个抽象父类。部分教材将抽象和封装、继承、多态一起定义为OOP的四大特征。
二、为什么要用抽象类:
正如上述所说,有时候有些父类自己本身不能被实例化的时候就可以建立抽象类。举个例子,我们有一个水果(Fruit)的父类;父类里有香蕉(Banana),芒果(Mango),和桃子(Peach)三个子类。
我们会发现,在世界上找不到一个仅仅名为“水果”的水果,水果仅仅是一个具体水果集合的概念,因此是不能被实例化的。对于这种自己不能被实例化的类,为避免Fruit被错误实例化,我们就可以创建一个抽象类来理论化实现,这样Fuirt便不能通过自身创建实例化对象。下面我们来演示如何创建抽象类。
三、抽象类代码实践:
以下就是我们创建的水果的抽象类,创建抽象的关键就是在访问修饰符public后面加上abstract关键字;另外有桃子,香蕉,和芒果三个子类继承这个类。
package Com.JoeBlog;
public abstract class Fruit {
public String name;
Fruit(String name){
this.name = name;
}
public void peel(){
System.out.println("剥皮");
};
}
这样创建好后,我们尝试在测试类main方法里创建实例时就会出现错误提示(抽象类无法实例化):
package Com.JoeBlog;
public class Main {
public static void main(String[] args) {
Fruit fruit = new Fruit();
}
}
输出错误:
:4:23
java: Com.JoeBlog.Fruit是抽象的; 无法实例化
需要注意的是,虽然抽象类自身不能实现实例化。但是,抽象类可以通过子类来创建对象。一下是我们建立一个Fruit抽象类的ArrayList的例子。
package Com.JoeBlog;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Fruit> fruitList = new ArrayList<Fruit>();
//创建三个Fruit 对象,注意:必须通过子类实现
Fruit mango = new Mango("Mango");
Fruit peach = new Peach("Peach");
Fruit banana = new Banana("Banana");
fruitList.add(mango);
fruitList.add(peach);
fruitList.add(banana);
//输出三个Fruit对象
for (Fruit x : fruitList) {
System.out.println(x.name);
}
}
}
总结
总的来说,抽象(Abstract)是Java面对对象编程(OOP)中很重要的一个概念,主要针对有时父类从逻辑上自己本身不能被实例化的情况,就可以创建个抽象父类。创建方式为在访问修饰符后面添加abstract关键字。注意,抽象父类可以通过子类来建立对象。