这是一个受保护的继承问题。我确实理解受保护意味着在包中,它就像是公共的一样。在包外部,一般来说,它只有在子类内部时才可以访问。这不是我的困惑。我的困惑在于正在发生的一个小挑剔,我不知道为什么。我将在代码之后解释问题的胆量。您将获得包含 TestA 类的包 com.wobble.foo 和 com.wobble.bar 它包含扩展类 A 的 TestB 类。
//A Package
package com.wobble.foo;
public class TestA{
static protected int x = 5;
protected int y = 6;
}
//A different Package
package com.wobble.bar;
public class TestB extends TestA{
static{
TestA t = new TestA();
t.x = 1; //compiles
t.y = 2; //field not visible, fails to compile
}
}
超类有两个变量,它们都受到保护,一个是静态的。不同包中的子类创建了一个新的超类对象,尝试访问这两个变量。为什么您能够通过对象访问静态变量,但不能通过它访问实例变量?它们都受到保护。两者都来自同一类。两者都由同一对象访问。请注意,对于那些认为这可能是重复的人:其他问题只是询问受保护的工作原理,但他们没有提出具体问题,即为什么只能访问这两个变量中的一个,这两个变量都受到保护。
这不是一个如何修复代码的问题。我知道如何让最终游戏发挥作用。问题是为什么它可以通过访问而不是通过?t.x;t.y;
aluckdog
相关分类