抽象类和接口有什么区别?

在 Java 中,抽象类和接口是两种不同的类类型。它们都不能直接实例化,并且它们都是用来定义一些基本的属性和方法的,但它们有以下几点不同:

  1. 定义:定义的关键字不同,抽象类是 abstract,而接口是 interface。
  2. 方法:抽象类可以包含抽象方法和具体方法,而接口只能包含方法声明(抽象方法)。
  3. 方法访问控制符:抽象类无限制,只是抽象类中的抽象方法不能被 private 修饰;而接口有限制,接口默认的是 public 控制符。
  4. 实现:一个类只能继承一个抽象类,但可以实现多个接口。
  5. 变量:抽象类可以包含实例变量和静态变量,而接口只能包含常量。
  6. 构造函数:抽象类可以有构造函数,而接口不能有构造函数。

以下是一个抽象类和一个接口的示例代码:

// 抽象类
public abstract class MyAbstractClass {
    public abstract void myAbstractMethod();
    private void myMethod() {
        System.out.println("This is a method in an abstract class.");
    }
    public int myVariable = 0;
    public static int myStaticVariable = 0;
    public MyAbstractClass() {
        System.out.println("This is a constructor in an abstract class.");
    }
}

// 接口
public interface MyInterface {
    void myAbstractMethod();
    int MY_CONSTANT = 0;
}

小结

抽象类和接口是 Java 两种不同的类类型,它们在定义、方法、方法访问控制符、实现、变量和构造函数方面都是不同的。

本文已收录至《Java面试突击》,专注 Java 面试 100 年,查看更多:https://www.javacn.site

posted @ 2023-05-16 09:56  javacn_site  阅读(65)  评论(0编辑  收藏  举报