java - 需要对 : Private Access modifier in java 进行解释

标签 java oop access-modifiers

我在 Java 中有两个类:Fist 类扩展了 Person 类。我在 Person 中有一个私有(private)变量 eyecolor,它是私有(private)的,并且我有一个公共(public)的 setter 和 getter。

现在,如果我在 Fist 类中扩展它,那么我可以设置变量,也可以获取它。

我的问题是,如果 eyecolor 是类 Person 的私有(private)成员,为什么我没有收到使用私有(private)成员的错误?为什么这段代码有效? eyecolor 数据成员是否被继承?

人员类别

package lets_start;

public class Person {
    private String eyecolor;

    public String getEyecolor() {
        return eyecolor;
    }

    public void setEyecolor(String eyecolor) {
        this.eyecolor = eyecolor;
    }
}

拳头级别

package lets_start;

public class Fist extends Person {
    public static void main(String[] args) {
        Fist f = new Fist();
        f.setEyecolor("Brown");
        System.out.println(f.getEyecolor());
    }
}

输出:

Brown

最佳答案

要从子类访问/编辑它,请将字段设为 protected/package-private或使用您在 Person 中定义的 getter/setter .

参见https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

<小时/>

why I be able to access it from its child classam not getting an error of using a private member? Why is this code working? Is the eyecolor data member get's inherited?

因为您通过 public 访问它getter/setter 继承自 Person 。为了更清楚地说明,eyecolor field 不是继承的,getter/setter 是继承的。

如果不清楚,请随时编辑您的问题或评论。

关于java - 需要对 : Private Access modifier in java 进行解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46057634/

相关文章:

java - 具有副作用的不可变对象(immutable对象)

c# - 为什么我不能拥有 protected 接口(interface)成员?

java - 在 GUI 中与 JavaFX 网络服务交互

python - 父类(super class)的实例变量的值在子类的实例中保持不变

python - Matplotlib plt.xlabel() 与 ax.set_xlabel()

c++ - 为什么私有(private)成员会被继承?

java - "public"类和未修改的类之间的区别?

Java HashMap 未返回预期结果

java - 通过使用自动更新 jtable 的 jtextfield KeyReleased 事件将模式与 Sql 数据库匹配

java - 处理这些 if 子句的更简洁的方法?