马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

java接口和抽象类、普通类的区别表格

2023-11-28 14:23:29java学习笔记 本文浏览次数:1 百度已收录

本 文 目 录

接口、抽象类和普通类是Java编程中重要的概念,它们在定义和实现类时具有不同的特性和用途。通过比较它们的定义、目的、继承机制、抽象方法、成员变量、构造函数和访问修饰符等方面的差异,我们可以更好地理解它们各自的作用和适用场景。

接口和抽象类、普通类的区别表格

特性 接口 抽象类 普通类
定义 定义了一组方法签名,但没有实现方法的具体实现。 定义了一个抽象类,其中包含一些抽象方法和非抽象方法。 定义了一个具体的类,其中包含属性和方法的具体实现。
目的 允许定义一组相关方法的协议。 提供一种方式来组织和抽象某些具有共同行为的类。 创建具有特定属性和行为的对象实例。
继承 可以被继承,但不能被实例化。 可以被继承,可以被实例化。 可以被继承,可以被实例化。
抽象方法 可以包含抽象方法。 可以包含抽象方法。 不可以包含抽象方法。
成员变量 只能是staticfinal类型。 可以是任何类型,包括staticfinal类型。 可以是任何类型,包括staticfinal类型。
构造函数 不可以有构造函数。 可以有构造函数。 可以有构造函数。
访问修饰符 方法不能有private修饰符。 可以有privateprotectedpublic修饰符。 可以有privateprotectedpublic修饰符。
实现机制 需要被实现(通过类来实现)。 不需要被实现(只是提供一个抽象框架)。 不需要被实现(已经提供了具体实现)。
使用场景 定义一组方法的协议,允许不同的类实现这些方法。 用于抽象和组织具有共同行为的类,提供一些通用的功能。 创建具体的对象实例,具有特定的属性和行为。

接口和抽象类、普通类代码使用上的区别

接口的代码示例:

public interface Animal {
    void makeSound();
    void move();
}

抽象类的代码示例:

public abstract class Mammal {
    protected String name;

    public Mammal(String name) {
        this.name = name;
    }

    public abstract void makeSound();

    public void move() {
        System.out.println(name + " is moving.");
    }
}

普通类的代码示例:

public class Dog extends Mammal implements Animal {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }

    @Override
    public void move() {
        System.out.println(name + " is running.");
    }
}

从上面的代码中可以看出以下区别:

  1. 接口:接口定义了一组方法签名,但没有实现方法的具体实现。在上面的示例中,Animal接口定义了两个方法:makeSound()move()。这些方法在接口中没有具体实现,需要在实现该接口的类中提供具体的实现。在示例中,Dog类实现了Animal接口,并提供了具体的方法实现。

  2. 抽象类:抽象类可以包含抽象方法和非抽象方法。在上面的示例中,Mammal是一个抽象类,它有一个抽象方法makeSound()和一个非抽象方法move()。抽象方法没有具体的实现,需要在继承该抽象类的子类中提供具体的实现。非抽象方法可以有具体的实现,子类可以选择覆盖或继承这些方法。在示例中,Dog类继承了Mammal抽象类,并提供了makeSound()方法的具体实现,同时也覆盖了move()方法。

  3. 普通类:普通类包含属性和方法的具体实现。在上面的示例中,Dog类是一个普通类,它继承了Mammal抽象类并实现了Animal接口。它包含了具体的属性(name)和方法实现(makeSound()move())。普通类可以被实例化并创建对象,而接口和抽象类则不可以。