我有一个有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
1条答案
按热度按时间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; }
方法。