java 从子类访问父类的私有示例字段..但它能工作吗?

pxq42qpu  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(133)

我有一个有2个私有示例字段的父类,但是我的没有示例字段的子类"神奇地"创建了2个示例字段。

public class Parent 
{
    private String firstName;
    public String lastName;
    private int age;

    public Parent()
    {
        System.out.println("No-Parameter Constructor");
    }

    public Parent(String firstName, String lastName, int age)
    {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String toString()
    {
        return "firstName: " + firstName + " lastName: " + lastName + " age: " + age;
    }

    public String getFN()
    {
        return firstName;
    }
}

public class Student extends Parent 
{

    public Student(String firstName, String lastName, int age)
    {
        super(firstName, lastName, age);
    }

    public static void main(String[] args) 
    {
        Parent p = new Parent("Logi", "Tech", 42);
        Student s = new Student("Logi", "Camera", 21);

        System.out.println(p);
        System.out.println(s);
        System.out.println(p);
        System.out.println(p.getFN());
    }
}

输出:

firstName: Logi lastName: Tech age: 42
firstName: LogiStudent lastName: Camera age: 21
firstName: Logi lastName: Tech age: 42
LogiStudent
f4t66c6m

f4t66c6m1#

你并没有从Student类中访问私有字段,只要看看你的代码--在class Student extends Parent {}的代码体中,你没有以任何方式引用那些字段。
class Student extends Parent是Java语言,用于:“让我们来定义这个新概念,称为Student。开始,绝对采取每一个最后的东西父母,然后螺栓,* 在所有这些之上 *,一些更多的东西”。
换句话说,如果Parent具有字段“age”,则Student也具有字段“age”。
无障碍环境几乎与这一概念完全无关;可达性(private)是关于哪个代码(不是哪个示例!!)被允许直接与事物交互。假设age字段是private,而Student的每个示例都有该字段,位于Student.java中的代码不能直接触及该字段。当然,调用其超类允许访问的方法是自由的(例如toString方法是public),然后观察 IT 接触这些字段。这不是'直接访问',这是间接的,这是好的。
类似地,Student可以在任何地方调用getFN(),从而得到名字,但是它不能 set firstname,当然,除非Parent决定添加一个void setFirstName(String fn) { this.firstName = fn; }方法。

相关问题