【发布时间】:2023-03-18 15:45:02
【问题描述】:
package practice;
class person{
private String firstname;
private String lastname;
public person(String firstname,String lastname){
set_first(firstname);
set_last(lastname);
}
public String get_first() {
return firstname;
}
public void set_first(String firstname) {
this.firstname=firstname;
}
public void set_last(String lastname) {
this.lastname=lastname;
}
public String get_last() {
return lastname;
}
}
class employee extends person {
private int empid;
public employee(String firstname, String lastname, int empid) {
super(firstname,lastname);
set_empid(empid);
}
public void set_empid(int empid) {
this.empid=empid;
}
public int get_empid() {
return empid;
}
}
class testing_super_keyword {
public static void main(String args[]) {
employee emp=new employee("Paul","Anderson",1234);
System.out.println(emp.get_first()+" "+emp.get_last());
System.out.println(emp.get_empid());
}
}
我在这里有两个类,个人超类和员工子类。所以我只是想知道这段代码不应该工作,因为名字和姓氏变量在超类中是私有的?但是子类(即员工)是如何继承这些成员并使用它的呢?
我认为超类的私有变量不能被继承,为什么在这里可以正常工作?
我很困惑,请帮忙......
【问题讨论】:
-
private字段firstname和lastname没有被继承。公共函数get_first()和get_last()是被继承的函数。如果您尝试调用firstname和lastname而不是函数,则会出现错误。 -
因为您在超类中使用了封装。这意味着您的字段是私有的,但它们具有公共的 getter/setter 方法,允许子类访问/修改私有字段。
-
您认为在
employee类中的哪个位置正在访问person的私有字段? -
我的意思是在子类对象中我们不访问私有成员,但是这些成员存在于子类不知道的子类对象中?
标签: java