Java 子类成员变量对另一个子类的可见性

Java 子类成员变量对另一个子类的可见性,java,inheritance,visibility,Java,Inheritance,Visibility,我正在运行一个测试程序,以了解更多关于成员变量可见性的信息,我创建了以下3个类: ParentClass.java ChildClass.java childclass.java ChildClass的mMember变量的访问级别是什么?它是公共的还是受保护的?mChildClass中的成员是从父类继承的,并且可见性没有改变-因此它仍然受保护它是受保护的,是从父类继承的 mMember在父类中声明为受保护的修饰符。ChildClass扩展了扩展父类的ChildClass。访问修饰符未在Child

我正在运行一个测试程序,以了解更多关于成员变量可见性的信息,我创建了以下3个类:

ParentClass.java

ChildClass.java

childclass.java

ChildClass的mMember变量的访问级别是什么?它是公共的还是受保护的?

mChildClass中的成员是从父类继承的,并且可见性没有改变-因此它仍然受保护

它是受保护的,是从父类继承的

mMember在父类中声明为受保护的修饰符。ChildClass扩展了扩展父类的ChildClass。访问修饰符未在ChildClass中更改,因此受保护的是ChildClass中的访问修饰符,它是从父类继承的

请看一篇控制变量访问修饰符的文章

提供对变量最严格的访问,除非您需要非限制性访问

编辑:

通过重新定义对mMember的减少访问来更改您的ChildClass代码,如下所示

private int mMember;

一旦将访问修饰符更改为private,ChildClass将无法访问现在是private的mMember。您将得到这个错误:FieldCyScCurrar .McEnter不可见[/P>< p>它将保持保护,不像C++中的那样,取决于继承的类型、公共的、受保护的或私有的,它仍然是相同的。
< C++允许这种继承的主要原因是它支持多重继承。但是,Java不支持它。因此,它只是通过将访问级别保持在超级类中来简化它。

这个问题表述得不好。只能在声明点设置可见性。在使用点上,您可以看到变量,也可以不看到。因此,当我访问变量时,您不能问什么是可见性?但我只能访问变量还是不能访问?。对于您的情况,这意味着:ChildClass是ParentClass的n个间接子级,并且mMember被声明为受保护,因此它在ChildClass中可见。有关更多信息,请参阅。

我在JavaDocs中查找了它,但似乎找不到任何相关信息。有证据吗?@JDev-你可以试试看,得到你的证据,或者相信我:证据只是因为你扩展了父类,它不会改变定义的变量。childchild类就像过去的两个类,它就像写作:受保护的int m成员;mMember=10;mMember=5;仅仅因为您更改了mMember的值并不意味着它更改了它的类型。您可以,受保护的变量可以被包中的任何类和包外的子类访问。您可以在同一个包中创建无限多的类,即使它不是子类,并且它仍然可以使用受保护的值。如果您想在包之外访问它,那么就需要创建一个子类并工作。但是,如果您试图从随机类访问它,它将不起作用。这是为了防止非相关类试图访问它,但允许子类访问它。你能详细说明一下吗?我明白你的意思,但我可以清楚地看到它在整个子类中都是可见的,这不是我的问题目标。此外,这个甲骨文文档并不能满足我对这个案例的好奇心。
public class ChildClass extends ParentClass {
    ChildClass() {
        mMember = 10;
    }
}
public class ChildChildClass extends ChildClass {
    ChildChildClass() {
        mMember = 5;
    }
}
private int mMember;