Java接口实现?

Java interface implementation?

我是 Java 的新手。请问下面的接口例子有什么不同?

public interface MyInterface {
  public void doSomething();
}

像这样

public class MyClass implements MyInterface {
   public void doSomething {....}
}

还有这个

public class MyClass implements MyInterface {
    protected MyInterface myInterface;

public MyClass (MyInterface myInterface) {
    this.myInterface = myInterface;
  }

public void doSomething () {
    myInterface.doSomething();
  }
}

前两段代码是一个接口,另一个class实现了接口。 第三个代码是 MyClass,它实现了 MyInterface 并创建了一个名为 myInterface 的对 MyInterface 的对象引用。下一部分

 public MyClass (MyInterface myInterface) {
  this.myInterface = myInterface;
 }

是一个简单的构造函数,下一部分

public void doSomething () {
myInterface.doSomething();
}

正在调用一个方法。

在第一种情况下,您使用 class 实现了一个接口,并在 class 中实现了函数 doSomething。您可以通过创建 class MyClass

的实例来调用 doSomething 函数
MyInterface obj = new MyClass();
obj.doSomething();

在第二种情况下,您甚至无法实例化 MyClass 的实例,因为它需要自身的另一个实例或实现该接口的另一个 class。

第一个是继承,第二个是组合。继承是一种 "is-a" 关系,而组合是一种 "has-a".

例如,如果有一个Pressable接口表示所有可以按下的东西,ButtonCheckbox应该实现它。如果有Colorclass,Button应该和Color有组合关系,因为Button应该有颜色,但是Button 不是 Color.

的类型

一个常见的错误是 java.util.Stack。由于 Stack 不是 java.util.VectorStack 不应继承 Vector.

public class MyClass implements MyInterface {
   public void doSomething {....}
}

MyClass 实现接口 MyInterface。这意味着您的 class 拥有您的界面承诺的具体行为。通过实现接口,您的 class 保证 MyClass 具有您的接口在其声明中抽象的具体功能。

但我怀疑您可能没有实现接口以及在 class 中创建接口实例的真实场景。您问题的第二部分是 inheritance vs composition 最著名的设计主题之一。同时使用接口的继承和组合的机会很少见。

接口在Java中是一种抽象类型,它指定了一组class必须实现的抽象方法。 class 通常实现第一个示例中所示的接口。

在你的第二个例子中,即使 MyClass 正在实现接口,doSomething 方法的行为将取决于实例化 MyClass 对象时它将获得的 MyInterface 实现的实例。

无法实例化接口。您将必须执行以下操作。这里 MySecondClass 实现了 MyInterface。

 MyClass m = new MyClass(new MyInterface()
  {

    @Override
    public void doSomething()
    {
      // TODO Auto-generated method stub

    }
  });

   MyClass m2 = new MyClass(new MySecondClass());
  }