You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

确认Java接口的正确使用方式及相关概念理解

Java接口实践与抽象、多态概念验证

一、用接口引用交互的方式完全正确

这是Java面向接口编程的标准写法,核心是依赖抽象而非具体实现,能大幅降低代码耦合度。下面是完整的可运行代码示例:

1. 定义RemoteControl接口

public interface RemoteControl {
    void turnOn();
}

2. TV类实现接口

public class TV implements RemoteControl {
    @Override
    public void turnOn() {
        System.out.println("电视机已开机");
    }
}

3. AC类实现接口

public class AC implements RemoteControl {
    @Override
    public void turnOn() {
        System.out.println("空调已开机");
    }
}

4. UserCode中通过接口引用调用

public class UserCode {
    public static void main(String[] args) {
        RemoteControl tv = new TV();
        RemoteControl ac = new AC();
        
        tv.turnOn(); // 输出:电视机已开机
        ac.turnOn(); // 输出:空调已开机
    }
}

这种写法的好处很直观:如果后续要加个投影仪(Projector)实现RemoteControl接口,UserCode不需要做任何修改,直接新增实现类即可,完美符合开闭原则。

二、抽象(Abstraction)的理解完全准确

抽象的本质就是只对外暴露必要的行为,隐藏具体实现细节。在这个例子里,RemoteControl接口就是抽象的载体:它只定义了turnOn()这个核心操作,完全不关心电视开机是启动屏幕还是加载系统,空调开机是启动压缩机还是自检——这些实现细节都被封装在各自的类里,UserCode只需要知道调用turnOn()就能完成开机,不需要了解内部逻辑,这正是抽象的核心价值。

三、多态(Polymorphism)的理解也没问题

多态分两种,咱们结合例子说:

  • 静态多态(编译时多态):靠方法重载实现,比如如果我们给RemoteControl加个带参数的turnOn(int mode)方法,或者在TV类里重载turnOn(),编译时就会根据你传入的参数类型确定调用哪个方法。虽然当前示例没用到,但这个逻辑是对的——方法调用的结果在编译阶段就确定了。
  • 动态多态(运行时多态):这就是当前示例的核心:RemoteControl接口引用可以指向任何实现它的对象(TV、AC),调用turnOn()时,运行时会根据实际指向的对象类型执行对应的代码。比如tv.turnOn()实际跑的是TV类的实现,ac.turnOn()跑的是AC类的实现,这种“同一方法,不同对象执行不同逻辑”的特性,就是运行时多态,也是面向接口编程能解耦的关键。

内容的提问来源于stack exchange,提问作者Sourav Karjole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:35:20