gpt4 book ai didi

java - 这是动态调度吗?

转载 作者:行者123 更新时间:2023-12-02 05:09:28 24 4
gpt4 key购买 nike

这是动态调度吗?

abstract class A{
public method Meth1(){
//somecode
}
}

class B extends A{
}

class C extends A{
}

完全在另一个类中:
Some_Method(A a){
a.Meth1();
}

我不确定这是否是动态调度,因为两个子类的行为都相同?

如果不是,如果行为是根据子类定义的,那么它将是动态分配吗?

最佳答案

我不确定您对特定问题的看法(如果静态地知道仅在一个类中声明了被调用的方法,则可能会有一些特定于实现的优化将绕过运行时类型检查),但实际上,动态分配允许在运行时确定Meth1方法的实际实现。因此,即使现在,BC都不会覆盖Meth1,以后,如果被覆盖,动态调度将确保如果正式参数a的运行时类型为B,则实际实现将是在B上。类似地,对于C

将此与Java中的方法重载进行对比,在Java中,实际方法是在编译时根据所声明的使用参数的类型确定实际方法的。

public class Overloading {

public static class User {}
public static class Admin extends User {}

public static String foo(User user) {
return "User specific method";
}

public static String foo(Admin admin) {
return "Admin specific method";
}

// This will print "User specific method" two times, because both
// user1 and user2 have same compile time type, i.e., User. Runtime
// type does not matter.
public static void main(String[] args) {
User user1 = new User();
System.out.println(foo(user1));

User user2 = new Admin();
System.out.println(foo(user2));
}
}

关于java - 这是动态调度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132883/

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