Java 抽象类 abstract

抽象类是指在类中定义方法,但是并不去实现它,而在它的子类中去具体的实现。定义的抽象方法不过是一个方法占位符。继承抽象类的子类必须实现父类的抽象方法,除非子类也被定义成一个抽象类

抽象类定义格式:

修饰符 abstract 类名 {
}

抽象类方法定义格式:

修饰符 abstract 返回值类型 方法名();

注意:抽象类中的方法不一定为抽象方法,但是抽象方法所在的类一定要定义为抽象类。

public abstract class Animal {
    abstract void breath();
}

public class Tiger extends Animal {
    void breath() {
        System.out.println("老虎用肺呼吸");
    }
}

public class Fish extends Animal {
    void breath() {
        System.out.println("鱼用腮呼吸");
    }
}

public class Test {
    public static void main(String[] args) {
        Tiger tiger = new Tiger();
        Fish fish = new Fish();
        
        tiger.breath();
        fish.breath();
    }
}

定义完抽象类后,就可以使用它。但是抽象类和普通类不同,抽象类不可以实例化,是无法通过编译的,但是可以创建抽象类的对象变量,只是这个变量只能用来指向它的非抽象子类对象。

public static void main(String[] args) {
        // 抽象类不可实例化,错误
        //Animal animal = new Animal();
        // 可以创建抽象类的对象来指向非抽象类,正确
        Animal animal = new Fish();
        animal.breath();
    }
}

尽管animal 存放的是Fish 对象,但是不能直接调用这些子类中独有的方法,调用独有方法的时候需要进行类型转换。

public class Test {
    public static void main(String[] args) {
        Animal animal = new Fish();
        animal.breath();
        ((Fish) animal).eat();
    }
}
原文地址:https://www.cnblogs.com/lialong1st/p/10282434.html