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

Java中如何使用extend?UML中A «extend» B的代码实现疑问

针对你的UML类关系与Java实现问题

首先得澄清一个UML符号的常见混淆:类图里的«extend»标注其实是不规范的——这个符号更多用在用例图里表示用例的扩展关系,而类之间的继承(泛化)关系,标准标注是空心三角箭头指向父类,通常配«inherit»或者直接写extends。你觉得这是依赖而非继承,这个判断大概率是对的,毕竟继承是严格的"is-a"关系,要是A和B不是这种从属关系,硬用继承肯定别扭。

下面分两种情况给你Java实现方案:

如果你确定是依赖关系

依赖关系的核心是A在某个场景下需要用到B的功能,但A和B并没有从属关系。Java里常见实现方式有三种:

  • 方法参数传入B的实例
  • 方法内部创建B的实例
  • 调用B的静态方法(如果B提供的话)

代码示例:

// 定义类B
public class B {
    public void doBusiness() {
        // 具体业务逻辑
    }

    // 静态方法示例
    public static void staticBusiness() {
        // 静态业务逻辑
    }
}

// 类A,依赖B
public class A {
    // 方式1:通过方法参数接收B实例
    public void processWithB(B b) {
        b.doBusiness();
    }

    // 方式2:在方法内部创建B实例
    public void initAndUseB() {
        B bInstance = new B();
        bInstance.doBusiness();
    }

    // 方式3:调用B的静态方法
    public void useStaticB() {
        B.staticBusiness();
    }
}

如果UML标注确实想表达继承(但你觉得不合适)

如果业务上A并不是B的一种(比如"汽车 extends 轮胎"就完全错误,应该是依赖/组合),那千万别硬用继承。这时候你需要重新梳理UML关系,把继承改成依赖或者聚合/组合,再用上面的依赖方式实现。

当然,如果是接口之间的扩展(比如A接口扩展B接口的功能),Java里确实用extends关键字,代码示例:

public interface B {
    void baseOperation();
}

// A接口扩展B接口的能力
public interface A extends B {
    void extendedOperation();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:05:27