如何扩展接口

ski*_*kip 8 java inheritance design-patterns interface

我正在编码接口.

我有一个接口A和一个实现它的B类.

有人告诉我,我可以覆盖B的通过扩展它的功能Ç但我问摸既不也不Ç,再后来代替ç作为实现类的一个在配置文件中.

我想,我需要的,是不是在使用方法,所以我需要一个方法添加到一个我能在实现Ç.但我不准碰一个.

有人可以帮助我完成它吗?

谢谢.

编辑: 示例代码:

A.java

public interface A {
    void X();
    void Y();
}
Run Code Online (Sandbox Code Playgroud)

B.java

public class B implements A {
    public void X() {//something interesting}
    public void Y() {//something not very interesting}
}
Run Code Online (Sandbox Code Playgroud)

现在因为我不被允许触摸任何一个A或者B我必须写另一个类C并从B扩展它来做我的事情.

C.java

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

现在我需要另一种方法 void Z()C.java做我的事,但因为我编码的接口A,如果我只是添加了一个方法C.java同时使用A's引用变量我不能打电话Z(),所以我必须声明void Z()A接口很好地使用它,但如果我这样做,我将不得不触摸A我不被允许.因此,如何解决这个问题是我一直想要问的问题.

基本上,我不能做以下事情:

A a = new C();
a.Z(); //can't do this
Run Code Online (Sandbox Code Playgroud)

那么有没有办法让我在不触及A或B的情况下实现类似的目标呢?

Dun*_*nes 7

我想我明白你想要什么.你有以下几点:

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();
Run Code Online (Sandbox Code Playgroud)

如果这是你想要的,那么恐怕无法做到.任何与之合作的人都A知道定义的方法A; 他们不会知道你someNewMethod()在课堂上定义的C.你需要被允许改变A.

请注意,在extremis中,您可以检查以下实例的类类型A:

A foo;
// ...

if (foo instanceof C) {
  ((C) foo).someNewMethod();
}
Run Code Online (Sandbox Code Playgroud)

但这真的很难看,打破了OO编程的许多基本规则.