java - 如何扩展接口(interface)

标签 java design-patterns inheritance interface

我正在为界面编码。

我有一个接口(interface) A 和一个实现它的类 B

我被告知我可以通过C 扩展B 的功能来覆盖它,但我被要求既不接触B 也不接触 C,然后在配置文件中将B替换为C作为A的实现类。

我认为我需要一个在A 中不可用的方法,所以我需要向A 添加一个我可以在C< 中实现的方法/强>。但我不允许触摸A

有人可以帮我解决这个问题吗?

谢谢。

编辑: 示例代码:

A.java

public interface A {
    void X();
    void Y();
}

B.java

public class B implements A {
    public void X() {//something interesting}
    public void Y() {//something not very interesting}
}

现在因为不允许我接触 AB 我不得不编写另一个类 C 并从 B 扩展它来做我的东西。

C.java

public class C extends B {
    public void Y() {//overriding B's not very interesting Y and making it interesting}
}

现在我需要 C.java 中的另一种方法 void Z() 来完成我的工作,但是因为我正在编码接口(interface) A 如果我在 C.java 上添加了一个方法,同时使用 A 的 引用变量我将无法调用 Z() 所以我将不得不在 A 接口(interface)中声明 void Z() 并像那样使用它,但如果我这样做,我将不得不触摸 A 我是不被允许。那么如何解决这个问题是我一直想问的。

所以基本上,我将无法执行以下操作:

A a = new C();
a.Z(); //can't do this

那么有什么方法可以让我在不触及 A 或 B 的情况下实现类似的目标吗?

最佳答案

我想我明白你想要什么。你有以下内容:

public interface A {
  // can't touch this
}

public class B implements A {
  // can't touch this
}

public class C extends B {
  // you want to add your own method
  void someNewMethod();
}

// And you wish to do this:
A foo = new C();
foo.someNewMethod();

如果这是你想要的,那恐怕是做不到的。使用A 的任何人都只知道A 中定义的方法;他们不会知道您在类 C 中定义了 someNewMethod()。您需要被允许更改 A

请注意,在极端情况下,您可以检查 A 实例的类类型:

A foo;
// ...

if (foo instanceof C) {
  ((C) foo).someNewMethod();
}

但这真的很丑并且违反了 OO 编程的许多基本规则。

关于java - 如何扩展接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328475/

相关文章:

java - 使用和未使用的数据库连接对象

c# - 条件继承 : base class depend on environment variable

带接口(interface)的 PHP 多重继承

java - Apache CXF java2wsdl : Custom symbol names

c++ - 在 C++ 中制作单例 Mixin 类

performance - ES:使用全局聚合的准联接查询与父子/嵌套查询相比如何?

php - 获取父类中子类的名称(静态上下文)

Java.sql.connection 对象第二次不工作

java - android.widget.filter 在我的自定义基本适配器中显示不同的结果

java - 使用 jni.h 在 C++ 中编译 java 方法时生成错误