gpt4 book ai didi

java - 如何强制转换以运行父类(super class)方法

转载 作者:行者123 更新时间:2023-12-02 04:19:52 24 4
gpt4 key购买 nike

有没有办法使用强制转换来m1()方法在 I1 中运行要打印的类 In I1 class ?我不希望它运行重写的方法。

class TestClass extends I1 implements I2{
public void m1() { System.out.println("Hello"); }
public static void main(String[] args){
I1 tc = new TestClass();
tc.m1();
}
}
class I1{
int VALUE = 1;
public void m1(){System.out.println("In I1 class");}
}
interface I2{
int VALUE = 2;
void m1();
}

最佳答案

不,你不能这样做。多态性的部分目的是能够对层次结构中较低的类隐藏实现细节。您可以调用父类(super class)方法,但只能作为重写方法内的调用。

这样想吧。也许 TestClass 在方法 m1 中做了一些重要的事情,以维护其内部状态并保持一致。也许它跟踪父类(super class)中完成的某些操作,并维护自己的缓存、副本或类似内容。如果你可以让它调用父类(super class)方法,那么该代码将不会运行,并且你会严重破坏TestClass

您评论中的建议的原因

((I1)tc).m1();

不起作用的是您更改了正式类型,但没有更改实际类型。在运行时,重写方法的调用基于实际类型,因此 JVM 仍然会注意到这是 TestClass 类型,并调用重写方法。

关于java - 如何强制转换以运行父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32915115/

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