java - 为什么我不能以这种方式访问​​ Java 中的 protected 变量?

标签 java protected

我有一个这样定义的类:

package prueba;

public class OtraClase {

[...]

protected int num3;

[...]

另一个类是这样定义的:

package otro;

import prueba.*;

public class OtraClaseMas extends OtraClase{

但是如果在最后一节课中我创建了一个 OtraClase 对象,我就不能这样做:

createdObjectOfOtraClase.num3=1;

而且我认为根据文档我应该能够,here .它说 protected 修饰符允许另一个包中其类的子类访问。就我对它的看法而言,我不认为它只是另一个包中其类的子类。

我是不是误会了什么?

编辑:我要么在使用类的构造函数,要么在另一个不同的函数中使用,但它在这两个地方都不起作用。

构造函数代码:

public OtraClaseMas(int num, int num2,int num3)
{
    super(num, num2,num3);      
    OtraClase oc=new OtraClase(1,1,1);
   //oc.num3=1; This doesn't work
}

方法代码:

public void foo()
{
    OtraClase oc=new OtraClase(1,1,1);
    //oc.num3=1; This doesn't work

}

最佳答案

protected 变量可以从同一个包或派生类访问它们自己的成员的方式相同,但是如果您在包的外部创建父类(super class)的实例父类(super class),即使您正在扩展同一个父类(super class),您也无法访问它

package packageA;
public class ClassA {
    protected int variableA;
}

package packageA;
public class ClassC {
    public void setVariableA() {
        ClassA classA = new ClassA();
        classA.variableA = 1; // OK
    }
}

package packageB;
public class ClassB extends ClassA {
    public void setVariableA() {
        ClassA classA = new ClassA();
        variableA = 1; // OK
        classA.variableA = 1;// this wont work
    }
}

关于java - 为什么我不能以这种方式访问​​ Java 中的 protected 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37362497/

相关文章:

java - 为什么 int + BigDecimal 不起作用?

java - 如何定义 Java Tomcat 应用程序的正确启动顺序?

java - 如何升级 javax.naming.* 和 javax.xml.* 导入以与 java 10 兼容

c# - 无法访问基类中的 protected 成员

ios - objective-c : Need suggestion for my way of having protected method?

java - 如何通过不同的屏幕尺寸保持与 XML drawables 的一致性?

flutter - @protected 在 dart 中是什么意思

android - "public void onDestroy()"和 "protected void onDestroy()"之间的区别?

java - 如何映射包含ArrayList的HashMap