- 1 抽象类概述
回想前面我们的猫狗案例,提取出了一个动物类。并且我们在前面也创建过了动物对象,其实这是不对的。
为什么呢?因为,我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道,这是什么动物。 所以说,动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物。同理,我们也可以推想,不同的动物吃的东西应该是不一样的,所以,我们不应该在动物类中给出具体体现,而是应该给出一个声明即可。在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。 - 2 抽象类特点
- 抽象类和抽象方法必须用abstract关键字修饰
- 格式:abstract class 类名{
public abstract void eat(); //注意抽象方法没有方法体{}
}
- 格式:abstract class 类名{
- 抽象类可以没有抽象方法,但是有抽象方法的抽象类必须是抽象类
- 抽象类无法实例化
- 按照多态的方式,有具体的子类实例化。其实这也是多态的一种,抽象类多态
- 抽象类的子类
- 要么是抽象类
- 要么子类重写抽象类中的所有抽象方法
- 抽象类和抽象方法必须用abstract关键字修饰
案例:
//declaration of abstract class.
abstract class Animal{
//public abstract void eat(){}; //Wrong declaration of abstract class.Abstract class is not allowed to have a body.
public abstract void eat();
public Animal(){}
}
abstract class Dog extends Animal{} //Sub-lass is an abstract class.
class Cat extends Animal{ //Sub-class is a concrete class.
public void eat(){
System.out.println("Cat like eating fish.");
}
}
class AbstractDemo1{
public static void main(String[] args) {
/*Animal a = new Animal(); 错误。Animal是抽象的; 无法实例化*/
Animal a = new Cat();//only by polymorphics
a.eat();
}
}
/*
running result:
Cat like eating fish.
*/