Interface 和 abstract class 对比

发布于 2024-03-09 12:19:02 字数 1865 浏览 53 评论 0

接口和抽象类的区别?

ParametersInterfaceAbstract class
使用时机功能增强避免独立,减少代码冗余
继承/实现一个类可以实现多个接口一个类只能继承一个抽象类
访问修饰符不支持 private,protected,一切皆 public支持所有修饰符
方法实现Java 8+支持默认实现,需要在方法前加 default 或 staticJava 8+ 支持默认实现

Interface

public interface ShapeInterface {

    default double getArea(){
        System.out.println("ShapeInterface default getArea().");
        return 0;
    }

    void foo();
}
public class Circle implements ShapeInterface {

    int r;
    double pi = 3.14;

    public Circle(int r) {
        this.r = r;
    }

    @Override
    public double getArea() {
        return pi * r * r;
    }

    //must impl in sub class
    @Override
    public void foo() {

    }

    public static void main(String[] args) {
        final Circle circle = new Circle(2);
        final double circleArea = circle.getArea();
        System.out.println("circleArea="+circleArea);
    }
}

Abstract class

abstract class ShapeAbstractClass {
    abstract double getArea();
}
public class Circle2 extends ShapeAbstractClass {

    int r;
    double pi = 3.14;

    private Circle2(int r) {
        this.r = r;
    }

    @Override
    public double getArea() {
        return pi * r * r;
    }

    public static void main(String[] args) {
        final Circle2 circle = new Circle2(2);
        final double circleArea = circle.getArea();
        System.out.println("circleArea="+circleArea);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

往日情怀

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文