📜  Java中抽象类和接口的区别(1)

📅  最后修改于: 2023-12-03 14:42:43.226000             🧑  作者: Mango

Java中抽象类和接口的区别

Java中的抽象类和接口是面向对象编程的两个重要概念。它们都是用于定义规范,但在一些方面存在差异。本文将介绍Java中抽象类和接口的区别。

相同点

抽象类和接口都是用来定义规范,它们都不能被直接实例化。在Java中,只有实现了接口或继承了抽象类的子类才能被实例化。

不同点
  1. 抽象类可以有构造器,而接口则不能有构造器。
abstract class Animal {
    public Animal() {
        // 抽象类可以有构造器
    }
}

interface Mammal {
    // 接口不能有构造器
}
  1. 抽象类中可以包含有方法的实现,抽象方法和具体实现方法的组合,而接口中的方法都是抽象方法,没有实现。
abstract class Animal {
    public void move() {
        System.out.println("动物移动!");
    }
    public abstract void eat();
}

interface Mammal {
    void move(); // 接口中的方法都是抽象方法,没有实现
    void breathe();
}
  1. 一个类只能继承一个抽象类,但是一个类可以实现多个接口。
abstract class Animal {} // 抽象类

interface Mammal {} // 接口

class Dog extends Animal implements Mammal {} // 继承抽象类Animal并实现接口Mammal
  1. 接口中的所有方法都是public的,抽象类中可以有public、protected和default的方法。
abstract class Animal {
    public void move() {} // public
    protected void grow() {} // protected
    void eat() {} // default
}

interface Mammal {
    void move(); // public
    void breathe(); // public
}
  1. 接口中的变量都是public static final的常量,而抽象类中的变量可以是普通的成员变量,也可以是public static final的常量。
abstract class Animal {
    int age; // 普通成员变量

    public static final PI = 3.14; // public static final 常量
}

interface Mammal {
    public static final int LEGS = 4; // public static final 常量
}
总结

抽象类和接口都是用于定义规范,它们的区别在于:

  • 抽象类中可以有构造器,接口不能有构造器
  • 抽象类中的方法可以有实现,接口中的方法都是抽象方法
  • 一个类只能继承一个抽象类,但是一个类可以实现多个接口
  • 接口中的所有方法都是public的,抽象类中可以有public、protected和default的方法
  • 接口中的变量都是public static final的常量,抽象类中的变量可以是普通的成员变量,也可以是public static final的常量