gpt4 book ai didi

java - 派生类的意外行为

转载 作者:行者123 更新时间:2023-12-03 01:38:59 24 4
gpt4 key购买 nike

我有一个简单的程序如下:

class Foo {
private final String str = getClass().getSimpleName();

protected void print(){
System.out.println(str);
}
}

class Bar extends Foo {
private final String str = getClass().getSimpleName();

@Override
protected void print(){
super.print();
System.out.println(str);
}
}

class FooBarMain {
public static void main(String[] args){
Foo foo = new Foo();
foo.print();

Foo foobar = new Bar();
foobar.print();

Bar bar = new Bar();
bar.print();
}
}

输出:

酒吧
酒吧
酒吧
酒吧

输出不应该如下吗?


酒吧

酒吧

从输出来看,好像str已在派生类中被重写。但, str是最终的和私有(private)的。没有办法可以覆盖它。谁能帮我?

最佳答案

这确实很简单:您使用 getClass() ,这意味着 this.getClass()。如果实例化 Bar,则 getClass() 将返回类 Bar - 无论是在 Foo 中调用还是在Bar:无论哪种方式,类都是Bar

关于java - 派生类的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680080/

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