Java 子类中的代码是如何工作的?
这里有两个类,person超类和employee子类。所以我只想知道这段代码不应该作为firstname工作,而lastname变量在超类中是私有的?但是子类employee是如何继承和使用这些成员的呢 我认为超类的私有变量不能被继承,所以为什么它在这里工作得很好呢Java 子类中的代码是如何工作的?,java,Java,这里有两个类,person超类和employee子类。所以我只想知道这段代码不应该作为firstname工作,而lastname变量在超类中是私有的?但是子类employee是如何继承和使用这些成员的呢 我认为超类的私有变量不能被继承,所以为什么它在这里工作得很好呢 我完全糊涂了,请帮助……尽管父类的私有变量不是由子类(即employee)继承的,但是有一些公共函数被称为getter和setter,允许从其子类访问类的私有成员 package practice; class person{
我完全糊涂了,请帮助……尽管父类的私有变量不是由子类(即employee)继承的,但是有一些公共函数被称为
getter
和setter
,允许从其子类访问类的私有成员
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());
}
}
您可以看到,当您想要从父对象访问firstname时,您将从employee对象调用
get_first()
来获取firstname。如果你想设置名字,你可以调用set\u first(“name”)
来设置名字。希望能有所帮助 尽管父类的私有变量不是由子类(即employee)继承的,但是有一些公共函数被称为getter
和setter
,它们允许从其子类访问类的私有成员
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());
}
}
您可以看到,当您想要从父对象访问firstname时,您将从employee对象调用
get_first()
来获取firstname。如果你想设置名字,你可以调用set\u first(“name”)
来设置名字。希望能有所帮助 让我们在这里回顾一下如何初始化firstname和lastname:
super(firstname,lastname)
,firstname和lastname传递给要照顾的家长(即人员)set\u first(firstname)
和set\u last(lastname)
,参数firstname和lastname在父类本身中使用从子构造函数(即Employee)传递的值进行设置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;
}
让我们在此处查看如何初始化firstname和lastname:
super(firstname,lastname)
,firstname和lastname传递给要照顾的家长(即人员)set\u first(firstname)
和set\u last(lastname)
,参数firstname和lastname在父类本身中使用从子构造函数(即Employee)传递的值进行设置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;
}
无法继承超类的私有变量
是的,你完全正确,他们不会继承。但是在您的代码中,您没有直接访问这些字段,对吗
public employee(String firstname,String lastname,int empid){
this.firstname=firstname; //Violation
this.lastname=lastname; //Violation
set_empid(empid);
}
在这里,您将参数(从主方法)传递给员工
构造函数,参数的名称与人员
中的字段类似,但它们不同。您可以像这样更改参数名称,它仍然可以正常工作
public employee(String firstname,String lastname,int empid){
super(firstname,lastname);
set_empid(empid);
}
这里,参数值被带入super
类构造函数中,初始化其私有字段,然后初始化empid
的empid
public employee(String fName, String lName,int empid){
super(fName,lName);
set_empid(empid);
}
这里您也没有直接访问private
字段,而是调用公共方法,该方法将继承给员工
,并可在其引用时调用
将类的成员保持为私有,将其行为(方法)保持为公共是封装
的一部分,这样您就不能直接访问它,而是可以使用公共方法设置和获取它的值
PS:如果IDE提供了选项,请尝试使用IDE生成getter和setter,并尝试遵循类和方法的命名约定
无法继承超类的私有变量
是的,你完全正确,他们不会继承。但是在您的代码中,您没有直接访问这些字段,对吗
public employee(String firstname,String lastname,int empid){
this.firstname=firstname; //Violation
this.lastname=lastname; //Violation
set_empid(empid);
}
在这里,您将参数(从主方法)传递给员工
构造函数,参数的名称与人员
中的字段类似,但它们不同。您可以像这样更改参数名称,它仍然可以正常工作
public employee(String firstname,String lastname,int empid){
super(firstname,lastname);
set_empid(empid);
}
这里,参数值被带入super
类构造函数中,初始化其私有字段,然后初始化empid
的empid
public employee(String fName, String lName,int empid){
super(fName,lName);
set_empid(empid);
}
这里您也没有直接访问private
字段,而是调用公共方法,该方法将继承给员工
,并可在其引用时调用
将类的成员保持为私有,将其行为(方法)保持为公共是封装
的一部分,这样您就不能直接访问它,而是可以使用公共方法设置和获取它的值
PS:如果IDE提供了选项,请尝试使用IDE生成getter和setter,并尝试遵循类和方法的命名约定。
private
字段firstname
和lastname
不会被继承。公共函数get\u first()
和get\u last()
是被继承的函数。如果尝试调用firstname
和lastname
而不是函数,则会出现错误。因为在超类中使用了封装