gpt4 book ai didi

java - Upcasting Objects - 静态和非静态类型的区别

转载 作者:行者123 更新时间:2023-11-30 08:14:35 25 4
gpt4 key购买 nike

我有以下java代码:

class A {
int someMethod () { return 1; }
int someMethod (A a) { return 2; }
int someMethod (B b) { return 3; }
int someMethod (C c) { return 4; }
static A anotherMethod ( Object obj) { return (A) obj; }
}

class B extends A {
int someMethod () { return 6; }
int someMethod (A a) { return 7; }
int someMethod (B b) { return 8; }
int someMethod (C c) { return 9; }
static A anotherMethod ( Object obj) { return (B) obj; }
}

class C extends A {
int someMethod () { return 11; }
int someMethod (A a) { return 12; }
int someMethod (B b) { return 13; }
int someMethod (C c) { return 14; }
static C anotherMethod ( Object obj) { return (C) obj; }
}

public static void main ( String [] args ){
A a = new A(); B b = new B(); C c = new C();
System .out. println (A. anotherMethod (b). someMethod (b));
}

正如预期的那样,输出是 8。

好的,现在我删除类 A 中的 someMethod(B b):

class A {
int someMethod () { return 1; }
int someMethod (A a) { return 2; }
int someMethod (C c) { return 4; }
static A anotherMethod ( Object obj) { return (A) obj; }
}

我和我的 friend 讨论了输出,但没有人能准确解释为什么我们现在得到 7 作为输出?!?!???

最佳答案

发生这种情况是因为这段代码:

A.anotherMethod(b)

给你一个类型为 A 的对象。然后你打电话:

.someMethod(b)

在那个实例上。现在,A 类不再有 someMethod(B b) 方法,它将调用 someMethod(A a) - 它可以这样做,因为 BA 的子类。

因为你调用该方法的实例实际上是B类型,而B类覆盖了someMethod(A a)一个最终被调用的,因此你的输出是 7。

关于java - Upcasting Objects - 静态和非静态类型的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29408399/

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