Java接口实现?
我是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
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
传递给您的构造函数?有什么好处?接口可以有多个实现。因此,在运行时可以得到不同的实现调用。我不是英语母语,我需要更多的时间来理解这些答案。非常感谢你!