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
相关产品推荐
相关产品推荐

