Java 接口与动态调度方法
正常重写(不使用接口) 这与使用接口执行此操作相同:Java 接口与动态调度方法,java,overriding,Java,Overriding,正常重写(不使用接口) 这与使用接口执行此操作相同: interface A { int x = 0; void show(); } class B implements A { public void show() { System.out.println("In B. x : " + x); } } class C implements A { public void show() { System.out.prin
interface A {
int x = 0;
void show();
}
class B implements A {
public void show() {
System.out.println("In B. x : " + x);
}
}
class C implements A {
public void show() {
System.out.println("In C. x : " + x);
}
}
class Test {
public static void main(String args[]){
A obj = new B();
obj.show();
obj = new C();
obj.show();
}
}
这两种情况下的输出将是相同的,甚至实现也是相似的。我的问题是,当您可以使用动态方法分派来做同样的事情时,为什么还要有接口呢?Vikingsteve是正确的,但我将添加更多细节 类型继承和实现继承之间有区别。在Java中,可以有多类型继承,但不能有多个实现继承
这意味着一个类可以实现多个接口,并从每个接口继承类型。从该类创建的对象基本上同时具有所有这些类型。但您只能扩展另一个类并继承其实现。Vikingsteve是正确的,但我将添加更多细节 类型继承和实现继承之间有区别。在Java中,可以有多类型继承,但不能有多个实现继承
这意味着一个类可以实现多个接口,并从每个接口继承类型。从该类创建的对象基本上同时具有所有这些类型。但是您只能扩展另一个类并继承它的实现。 ,这里有一些要考虑的要点:
我希望这会使你对这两种设计都有明显的不同。 < P>有一些要考虑的要点:
我希望这将使您清楚地了解这两种设计的区别。接口和超类适用于不同的用例:
- 超类允许分解常见方法(但在java中,类只有一个父类)
- 接口声明常量和/或方法签名,但类可以实现它所需的任意多个方法
代理时需要接口,因为代理只能实现接口而不能扩展类。在Spring这样的框架中大量使用代理来进行简单的面向方面编程。接口和超类用于不同的用例:
- 超类允许分解常见方法(但在java中,类只有一个父类)
- 接口声明常量和/或方法签名,但类可以实现它所需的任意多个方法
代理时需要接口,因为代理只能实现接口而不能扩展类。在Spring这样的框架中大量使用代理来进行简单的面向方面的编程。由于在Java中不可能有多重继承,您也可以在中提供show()的实现,因此派生类不需要提供重写,因为接口不能提供重写。这是Mark的观点。使用您的接口方式,您无法打印“In A.x:”。由于在Java中不可能多重继承,您还可以在中提供show()的实现,因此派生类不需要提供重写,因为接口不能。添加到Mark的点。使用您的界面方式,您无法打印“A.x:”。
interface A {
int x = 0;
void show();
}
class B implements A {
public void show() {
System.out.println("In B. x : " + x);
}
}
class C implements A {
public void show() {
System.out.println("In C. x : " + x);
}
}
class Test {
public static void main(String args[]){
A obj = new B();
obj.show();
obj = new C();
obj.show();
}
}