Java接口实现?

Java接口实现?,java,interface,implements,Java,Interface,Implements,我是Java的新手。我想问一下以下接口示例之间的不同之处 public interface MyInterface { public void doSomething(); } 像这样 public class MyClass implements MyInterface { public void doSomething {....} } 还有这个 public class MyClass implements MyInterface { protected MyInte

我是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();
  }
}

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

 public MyClass (MyInterface myInterface) {
  this.myInterface = myInterface;
 }
是一个简单的构造函数,下一部分

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

是方法的调用。

在第一种情况下,使用类实现接口,并在该类中实现函数
doSomething
。您可以通过创建类的实例来调用
doSomething
函数
MyClass

MyInterface obj = new MyClass();
obj.doSomething();

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

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

例如,如果有一个
可按
界面,它表示可以按的所有内容,
按钮
复选框
应该实现它。如果存在
颜色
类,则
按钮
应在
颜色
之间具有组合关系,因为
按钮
应具有颜色,但
按钮
不是
颜色
的类型

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

public class MyClass implements MyInterface {
   public void doSomething {....}
}
MyClass实现接口MyInterface。这意味着类拥有接口承诺的具体行为。通过实现接口,您的类保证MyClass具有在声明中抽象的接口的具体特性


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

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

在第二个示例中,即使
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());
  }

你为什么要用第二种方法呢?您将如何创建一个
MyInterface
传递给您的构造函数?有什么好处?接口可以有多个实现。因此,在运行时可以得到不同的实现调用。我不是英语母语,我需要更多的时间来理解这些答案。非常感谢你!