在学习JAVA的类的时候,我们会接触到一种比较特殊的类——抽象类,首先我们看一段代码
package com;
abstract class Animal{
public abstract void eat();
}
class Dog extends Animal{
public void eat(){
System.out.println("狗吃骨头");
}
}
class Cat extends Animal{
@Override
public void eat(){
System.out.println("猫吃鱼");
}
}
public class AbstractDemo {
public static void main(String[] args) {
Cat cat=new Cat();
Dog dog=new Dog();
cat.eat();
dog.eat();
}
}
在这段代码中,我们发现有重复的部分,就是public void eat()这个方法,所以我们重新写一个类Animal,让Dog、Cat去继承Animal。但是这两个类的方法相似,但是具体内容又不太一样,所以我们只能抽象它的声明,没有具体的方法体,没有具体方法的方法就是抽象方法。
abstract class Animal{
public abstract void eat();
}
这里的abstract是一个关键字,用来修饰方法和类。
注意:一个类继承抽象类需要重写它所有的抽象方法
class Cat extends Animal{
@Override
public void eat(){
System.out.println("猫吃鱼");
}
}
如果我们不想重写抽象方法,那么这个类必须是抽象类
abstract class Cat extends Animal{
}
抽象类的特点:
(1)抽象方法只能在抽象类里
(2)抽象类/方法必须使用abstract修饰
(3)抽象类不能创建对象(不能实例化)但是抽象类有构造方法,因为需要对抽象类的成员变量初始化
(4)抽象类中可以有非抽象的方法
(5)抽象类和类的关系也是继承
(6)一个类继承了抽象类要么重写所有抽象方法,要么它自己是抽象类
final: 关键字
修饰的类不能被继承
修饰的成员变量是常量
修饰的成员方法不能被重写