java抽象类的定义和使用

1. 抽象类的规则

● 抽象类不可以被实例化,也就是不能被new,会出现编译错误。抽象类如果想实例化可以通过非抽象子类的方式去实现。
● 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。而且抽象类中的抽象方法只能做方法声明,不能有具体的实现逻辑。
● 抽象类中的抽象方法,在非抽象子类中必须要实现。
● 构造方法、类方法(用static修饰的方法)不能声明为抽象方法。

2. 说明

一般是在设计阶段决定抽象类的使用,抽象类在业务中一般表示一种分类,而其子类这是该分类下的具体。例如 动物 分为 猫、狗等,在代码的实现时可以将 Animal 使用 abstract 修饰,而 Cat 、Dog两个类要继承Animal,如果Animal中有 abstract 修饰的方法,在 Cat 和 Dog必须要实现抽象方法。除非 Cat、Dog 也是使用 abstract修饰。

3. 代码实现

Animal.java

// 抽象类中才可以有抽象方法
public abstract class Animal {

    private String name;

    // 抽象方法,只需要在此声明即可
    // 动物的行动方式
    public abstract void action();

    public void eat() {
        System.out.println("动物都会吃东西");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

** Dog.java**

// 该类是 Animal 的非抽象子类,抽象方法必须要实现
public class Dog extends Animal {

    public Dog() {
        this.setName("狗");
    }

    // 此方法在 Aniaml中是非抽象方法,在 Dog 中不是必须重写的方法
    @Override
    public void eat() {
        System.out.println("狗可以吃骨头");
    }

    // 此方法在 Aniaml中是 抽象方法,在 Dog 中必有具体实现
    @Override
    public void action() {
        System.out.println("狗可以跑");
    }
}

Cats.java

// 当 Animal 的子类同为抽象类的时候,抽象方法可以不用实现
public abstract class Cat extends Animal {

    public Cat() {
        this.setName("猫类");
    }
}

抽象类 Animal 是不能直接使用new创建实例的,只能通过 实例化其非抽象子类

public static void main(String[] args) {
    // 实例化方式
    Animal dog = new Dog();

    // 此种方式相当于直接创建一个 非抽象类,不是抽象类实例化的一种方式
    Animal animal = new Animal() {
        @Override
        public void action() {
        }
    };
}
posted @ 2022-12-06 09:59  向宁的光  阅读(478)  评论(0)    收藏  举报