gpt4 book ai didi

java - 接口(interface)和动态方法调度

转载 作者:行者123 更新时间:2023-11-29 03:19:38 24 4
gpt4 key购买 nike

普通覆盖(不使用接口(interface))

class A {
int x = 0;
void show() {
System.out.println("In A. x : " + x);
}
}

class B extends A {
void show() {
System.out.println("In B. x : " + x);
}
}

class C extends A {
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();
}
}

这与使用接口(interface)的方式相同:

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

两种情况下的输出都是一样的,甚至实现也是相似的。我的问题是,当您可以使用动态方法分派(dispatch)来做同样的事情时,为什么还要接口(interface)?

最佳答案

有几点需要考虑:

  1. 接口(interface)给你选择你的类与其他类一起扩展。如你所知,你不能扩展多个类,但你可以实现多个接口(interface)(实现多重继承)。
  2. 通过扩展类,您不能强制子类覆盖父类(super class)中定义的方法。而在接口(interface)实现中强制在子类中实现您的方法。
  3. 这取决于您需要的实现方式。你希望子类必须实现方法而不是你需要使用接口(interface)设计,而你不会为子类重写父类(super class)方法而烦恼,因为你可以使用扩展设计。

我希望这能让您清楚地了解这两种设计的区别。

关于java - 接口(interface)和动态方法调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24431742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com