抽象类abstract

127 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

java类分为具体类和抽象类。什么是抽象类呢?就是只定义了行为没有描述此行为的具体特征的类。java中用abstract关键字表示抽象。abstract可以修饰类和方法。

一、抽象方法

  1. 抽象方法只有声明,没有方法体。
  2. 子类继承父类时,必须实现父类的所有抽象方法;因此在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,若使用 private 声明后,子类无法进行重写。
  3. 抽象类中可以有非抽象方法,但是具体类中不能用抽象方法。
  4. 抽象方法也不能用static修饰,因为static修饰的方法可以直接通过类名调用,而抽象方法没有方法体,更不存在任何的业务逻辑,所以无意义。

二、抽象类

  1. 抽象类是用abstract关键字修饰的类,其形式为:public abstract class 类名{}。
  2. 抽象类不能被实例化,换言之我们没法直接 new 出一个抽象类。只能有通过子类继承抽象父类后才能进行实例化。虽然抽象类不能被实例化,但它有自己的构造方法。
  3. 抽象类不同于接口,接口中不能有实例方法去实现业务逻辑,而抽象类中可以有实例方法。
  4. 抽象类不能使用final关键字修饰;因为抽象类需要通过继承去实现其抽象方法,而final修饰的类无法被继承。 代码示例:
/**
 * 抽象类
 */
public abstract class Animal {
    private String name;

    /**
     * 抽象方法,没有{},以";"结尾
     */
    abstract void say();
    
    /**
     * 抽象类中可以有实例方法
     */
    public void setName(String name) {
        this.name = name;
    }
}

---------------子类-------------

public class Dog extends Animal{
    /**
     * 子类必须实现父类所有的抽象方法
     */
    @Override
    void say() {
        System.out.println("汪汪汪!!");
    }

}