gpt4 book ai didi

java - 覆盖方法和字段的不同行为

转载 作者:搜寻专家 更新时间:2023-11-01 01:36:25 24 4
gpt4 key购买 nike


我只是注意到覆盖方法的行为确实不同于覆盖字段。考虑以下片段:

public class Bar {
int v =1;

public void printAll(){
System.out.println(v);
printV();
}

public void printV(){
System.out.println("v is " + v);
}
}

public class Foo extends Bar {
int v = 4;

public static void main(String[] args) {
Foo foo = new Foo();
foo.printAll();
}

public void printV() {
System.out.println("The value v is " + v);
}
}

它导致输出:
1
v的值为4

所以看起来 bar 中的 printV 方法被 foo.printV 覆盖了,而 bar 中的字段 v 没有被覆盖。有谁知道造成这种差异的原因吗?

谢谢。

最佳答案

I just noticed that overriding methods does behave different than overriding fields.

没有“覆盖字段”这样的东西。您可以隐藏 字段,但不能覆盖它们。字段不是多态的。参见 section 6.4.1 of the Java Language Specification了解更多详情。

请注意,一般来说,无论如何,字段几乎总是应该是私有(private)的,这意味着您一开始就不会意识到这一点。

关于java - 覆盖方法和字段的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11971027/

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