一个类中的方法如果是抽象的话,该类就必须定义为抽象类.
抽象类不一定有抽象方法.抽象类和抽象方法必须用abstract修饰.
抽象类的子类要么是抽象类要么重写抽象类中的所有方法
抽象类不能实例化 按照多态的方式使用
abstract class Animal {
public abstract void eat();
}
abstract class Dog extends Animal {
}
class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
}
class AbstractDemo {
public static void main(String[] args) {
//Animal a = new Animal(); //无法实例化
//Dog d = new Dog(); //无法实例化
//Cat c = new Cat();
//多态
Animal a = new Cat();
a.eat();
}
}
抽象类的成员特点:
A.成员变量:可以是变量,也可以是常量
B.构造方法:有构造方法,但是不能实例化.
问题:构造方法有什么用? 用于子类访问父类时的初始化
C.成员方法:可以有抽象方法,也可以有非抽象方法.
抽象方法:强制要求子类做某些事情.
非抽象方法:用于给子类直接使用,提高了代码的复用性
两个问题:
1.
一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
可以.为了不让别人创建对象
2.abstract不能和哪些关键字合用?
final:final修饰的方法不能被重写,而abstract系iushi的方法要求必须被重写
private:同上
static:static修饰的方法可以通过类名调用,而abstract修饰的方法是没有方法体的,调用一个没有方法体的方法是没有
意义的,所以不能共享.