问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

还在纠结抽象类和接口?看这篇就够了!

创作时间:
作者:
@小白创作中心

还在纠结抽象类和接口?看这篇就够了!

引用
51CTO
1.
https://blog.51cto.com/u_16237826/12789032

在Java开发中,抽象类和接口是两个非常基础且重要的概念。它们在设计模式、代码复用和多态性等方面发挥着关键作用。本文将从定义、特点、区别和应用场景等多个维度,全面解析抽象类和接口,帮助读者更好地掌握这两个概念。

抽象类

抽象类是用abstract关键字修饰的类,表示这个类不能被直接实例化,它的主要目的是为子类提供一个公共的模板。

特点:

  • 可以包含抽象方法(没有方法体)和普通方法(有方法体)。
  • 可以包含成员变量。
  • 支持构造方法,但不能直接实例化。
  • 一个类只能继承一个抽象类(单继承)。

代码示例:

public abstract class Animal {
    private String name;

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

    public abstract void makeSound();

    public void eat() {
        System.out.println("This animal is eating.");
    }
}

接口

接口是用interface关键字定义的,表示一组规范或契约,所有实现接口的类必须实现接口中的所有方法。

特点:

  • 所有方法默认是public abstract(JDK 8以后可以有默认方法和静态方法)。
  • 变量默认是public static final
  • 不可以有构造方法。
  • 一个类可以实现多个接口(多实现)。

代码示例:

public interface Flyable {
    public abstract void fly();
}

抽象类和接口的区别

接下来,我们进入重点环节,全面分析抽象类和接口的区别。

1. 定义和设计目的

  • 抽象类:用于描述一类事物的共性,比如动物有名字、有吃饭的行为,但具体的叫声需要各个子类自己实现。
  • 接口:用于描述一组功能的契约,比如飞行、游泳等行为,可以被不同的类实现。

2. 方法和变量

抽象类

  • 可以有普通方法和抽象方法。
  • 可以有普通成员变量和静态常量。

接口

  • JDK 8之前只支持抽象方法,JDK 8后支持默认方法和静态方法。
  • 变量只能是public static final

3. 继承关系

  • 抽象类:一个类只能继承一个抽象类(单继承)。
  • 接口:一个类可以实现多个接口(多实现)。

4. 构造方法

  • 抽象类:可以有构造方法,用于被子类调用。
  • 接口:不能有构造方法。

5. 默认访问修饰符

  • 抽象类:普通类的规则,成员可以是privateprotectedpublic
  • 接口:所有方法默认是public abstract,变量默认是public static final

6. 实现方式

  • 抽象类:继承,用extends关键字。
  • 接口:实现,用implements关键字。

对比总结表

特征
抽象类
接口
定义
abstract修饰的类
interface定义的规范
方法
可以有普通方法和抽象方法
JDK 8前只有抽象方法,JDK 8后可以有默认方法和静态方法
变量
可以有普通成员变量和静态常量
变量只能是public static final
继承
单继承
多实现
构造方法
可以有
不能有
访问修饰符
可以是privateprotectedpublic
所有方法默认是public abstract,变量默认是public static final
实现方式
extends
implements

实际开发中的应用场景

聊完区别,我们再来看抽象类和接口的应用场景。

1. 使用抽象类的场景

当你有一组共享的状态或行为,并且需要某些默认实现时,可以使用抽象类。

示例:比如开发一个游戏,定义了一个Character抽象类,所有的游戏角色都需要继承它。

2. 使用接口的场景

当你需要定义一组规范,并且可能被不同的类实现时,可以使用接口。

示例:比如开发一个物流系统,可以定义Trackable接口,所有可以追踪的物品都实现这个接口。

3. 抽象类和接口的结合使用

在实际项目中,抽象类和接口经常结合使用。

示例:开发一个IoT系统,Device是一个抽象类,Connectable是一个接口。

面试中的答题技巧

最后,给大家几个答题小建议:

  • 结构清晰:可以从定义、特点、区别、应用场景等方面答题,逻辑要清晰。
  • 举例说明:最好能结合实际开发举例,展现你对概念的理解。
  • 扩展延伸:如果时间允许,可以提一下JDK 8对接口的新特性。

抽象类和接口的区别是Java开发中非常基础却又很重要的知识点。掌握它们不仅能帮你通过面试,还能让你在实际开发中做出更合理的设计选择。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号