gpt4 book ai didi

java - 阴影/变量范围

转载 作者:行者123 更新时间:2023-11-29 03:00:48 29 4
gpt4 key购买 nike

我以为我理解阴影的概念。但是这段代码让我想知道:

public class Counter {
int count = 0;

public void inc() {
count++;
}

public int getCount() {
return count;
}

class StepCounter extends Counter {
int count = 0;
int step = 1;

public StepCounter(int step) {
this.step = step;
}

public void inc() {
count += step;
}

StepCounter sc = new StepCounter(2);
sc.inc();
sc.inc();
System.out.println(sc.getCount());
System.out.println(sc.count);

所以基本上 sc 的静态类型是 StepCounter。它的计数器增加了两次,所以在前两个命令之后它是 4。我的 count 变量不是私有(private)的,它是包私有(private)的(因为我没有声明它的任何可见性)。因此,如果我在 sc 上调用 .getCount() 方法,它首先会在 StepCounter 中查找它。没有,所以它去柜台。它在这里找到了 getCount() 方法。该方法返回计数。如果 count 是静态的或私有(private)的,我会理解为什么它返回 0。但是为什么在这种情况下它返回 0?即使我在 StepCounter 中公开变量计数,结果仍为 0。

最佳答案

getCount() 可以 只能访问在父类中定义的字段counter。此类在父类的编译 时解析。子级中没有方法 getCounter()副本

在子类中,可以使用

Counter.this.count

访问父计数器。但是为了避免意外,您永远不应该以这种模棱两可的方式命名字段。

关于java - 阴影/变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114527/

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