Java中普通类,接口,抽象类的区别

154 阅读2分钟

普通类(Concrete Class)

普通类是完全实现的类,它可以有属性和方法,也可以包含构造函数等。普通类可以直接被实例化,用于创建对象。一个普通类可以继承自另一个类,并且可以实现多个接口。

public class Animal {
    // 属性
    private String name;
​
    // 构造器
    public Animal(String name) {
        this.name = name;
    }
​
    // 方法
    public void eat() {
        System.out.println(name + " is eating.");
    }
}

接口(Interface)

接口是一种特殊的抽象类,它只能包含抽象方法(默认为<font style="color:rgb(44, 44, 54);">public abstract</font>)和常量(默认为<font style="color:rgb(44, 44, 54);">public static final</font>)。从Java 8开始,接口可以包含默认方法和静态方法。接口主要用于定义一组行为或能力,不提供具体的实现。一个类可以通过实现接口来表明它支持这些行为或能力。

public interface Flyable {
    // 默认方法
    default void takeOff() {
        System.out.println("Taking off...");
    }
​
    // 抽象方法
    void fly();
    public void create();
    public abstarct void delete();
​
    // 静态方法
    static void land() {
        System.out.println("Landing...");
    }
}

抽象类(Abstract Class)

抽象类是可以包含抽象方法(没有具体实现的方法)和具体方法(有具体实现的方法)的类。抽象类不能被实例化,但是可以被继承。子类必须实现所有未实现的抽象方法,除非子类也是抽象的。抽象类通常用来表示一种通用类型或者作为其他类的基础。

public abstract class Vehicle {
    // 抽象方法
    public abstract void startEngine();
​
    // 具体方法
    public void stopEngine() {
        System.out.println("Engine stopped.");
    }
}

总结

特性/类型普通类接口抽象类
直接实例化可以不可以不可以
包含抽象方法不可以可以可以
包含具体方法可以Java 8+ 可以 (default, static)可以
多重继承不可以可以 (通过实现多个接口)不可以
定义行为可以主要用于定义行为可以
实现细节提供完整的实现不提供实现细节可以提供部分实现