前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中抽象类(abstract class)和接口(interface)有什么不同?

Java中抽象类(abstract class)和接口(interface)有什么不同?

作者头像
用户1289394
发布2023-08-22 17:10:27
3900
发布2023-08-22 17:10:27
举报
文章被收录于专栏:Java学习网Java学习网

Java 中的抽象类(abstract class)和接口(interface)是两种常见的抽象化机制,它们都可以被用于定义一些具有一定抽象特性的东西,例如 API 或者系统中的某些模块。尽管抽象类和接口有着相似之处,但也有明显的区别。下面将详细介绍这两个概念的不同点。

1、抽象类

抽象类是指不能直接实例化的类,只能被用来派生其他类,它被设计成为仅包含可继承的方法、属性和变量。抽象类通常用于在类层次结构的根部建立一个适当的上下文语境。常见的抽象类特征如下:

  • 抽象类可以包含成员变量和成员方法,也可以包含抽象方法以及非抽象方法。
  • 抽象类必须通过关键字 abstract 进行声明,并且如果类中有一个或多个抽象方法,则该类必须被声明为抽象类。
  • 抽象类可以被用来给其他类作为父类,抽象类的子类需要实现其中的所有抽象方法,否则子类也必须声明为抽象类。

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

代码语言:javascript
复制
public abstract class Shape {
    protected double area;

    public abstract double calculateArea();

    public void printArea() {
        System.out.println("The area of this shape is " + area);
    }
}

上面的代码中,Shape 是一个抽象类,它定义了一个受保护的成员变量 area 和一个抽象方法 calculateArea()。当继承 Shape 的具体子类实现 calculateArea() 方法之后,可以使用 printArea() 方法来打印出计算出来的面积。

2、接口

接口和抽象类一样也是一种特殊类型的类,它仅声明了一组或者多组方法以及常量,可以被看作是一个对外公开的 API 契约。接口在 Java 中属于比抽象类更加抽象的概念。常见的接口特征如下:

  • 接口中只能包含常量、方法的声明(而非实现)以及内部定义的其他类型(如枚举类型或内部类)。
  • 在接口中声明方法时必须使用关键字 public 或者 default 修饰,并且通常不需要使用 abstract 关键词,因为接口中所有方法都默认为抽象方法。
  • 一个类可以实现多个接口,从而得到多个抽象函数的实现,表示它强制要求 Java 类实现该接口的相关方法。
  • 除了 java.lang.Object 之外,任何类都可以实现一个接口,而无需拓展任何类。
  • 接口中只有常量,没有变量。声明一个常量时必须使用 static 关键字,一般再加上 final 关键字使其成为常量。

下面是一个接口的示例代码:

代码语言:javascript
复制
java复制代码public interface Vehicle {
    void run();

    int getValue();
}

上面的代码定义了一个包含两个方法的接口 Vehicle,其中 run() 方法用于所有车辆的运行,而 getValue() 方法则用于获取车辆的价值。

3、抽象类和接口的区别

抽象类和接口都可以理解为一种模板或契约,它们之间虽然有相似点,但也存在很多不同之处。在下面的列表中,我们会总结这两种抽象机制的主要差异:

(1)、abstract class 可以包含普通成员变量,而 interface 只能包含静态常量(即 public static final)。

(2)、abstract class 可以包含非抽象方法,而 interface 中的所有方法都默认为抽象方法。

(3)、一个类只能继承一个 abstract class,但可以实现多个 interface。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-17,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、抽象类
  • 2、接口
  • 3、抽象类和接口的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com