如何 return 一个子类独有的变量?
How to return variable that is exclusive to one subclass?
我有 class Person
有多个子class。所有子 class 都有相同的变量(name
、address
、phone
),但有一个有一个额外的变量,rank
。我知道如何显示 name
、address
、phone
但我不知道如何显示 rank
.
定义class:
public class Person {
public String name;
public String address;
public String phone;
public Person(String name, String address, String phone) {
this.name = name;
this.address = address;
this.phone = phone;
}
public String toString() {
return this.getClass().getName() + "\n" + name;
}
}
用rank
定义子class:
public class Pupil extends Person {
public String rank;
public Student(String name, String address, String phone, String rank) {
super(name, social, phone);
}
}
创建 pupil
并显示 name
、address
和 phone
。
public class Test {
public static void main(String[] args) {
Person person = new Person("John", "1 John Deer Rd", "1112223333");
Person pupil = new Pupil("Jane", "2 John Deer Rd", "1112223333", "junior");
System.out.println(pupil.name + "'s phone is " + pupil.phone + " and their address is " + pupil.address + "." + "\n");
}
}
如何同时显示 rank
?
您可以使用 Pupil 的构造函数代替 Person 的构造函数
public class Pupil extends Person {
public String rank;
public Pupil (String name, String address, String phone, String rank) {
super(name, social, phone);
}
}
Pupil pupil = new Pupil("Jane", "2 John Deer Rd", "1112223333", "junior");pupil = new Pupil("Jane", "2 John Deer Rd", "1112223333", "junior");
System.out.println(pupil.name + "'s phone is " + pupil.phone + " and their address is " + pupil.address + "." + "\n"+pupil .rank);
我建议使用 getter 和 setter 方法并使用它们并将您的字段设为私有。
您可以阅读 more about setter and getter methods
一个简单的例子:
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name =name;
//get name parameter and set it to this class'sname parameter }
最后但同样重要的是,我建议您阅读 this keyword
开心点。
您必须将对象从 Person
转换回 Pupil
:
((Pupil)pupil).rank
如果您不能 100% 确定您的对象实际上是一个 Pupil,您应该添加完整性检查:
if(pupil instanceof Pupil) {
System.out.println(…+((Pupil)pupil).rank+…);
}
我有 class Person
有多个子class。所有子 class 都有相同的变量(name
、address
、phone
),但有一个有一个额外的变量,rank
。我知道如何显示 name
、address
、phone
但我不知道如何显示 rank
.
定义class:
public class Person {
public String name;
public String address;
public String phone;
public Person(String name, String address, String phone) {
this.name = name;
this.address = address;
this.phone = phone;
}
public String toString() {
return this.getClass().getName() + "\n" + name;
}
}
用rank
定义子class:
public class Pupil extends Person {
public String rank;
public Student(String name, String address, String phone, String rank) {
super(name, social, phone);
}
}
创建 pupil
并显示 name
、address
和 phone
。
public class Test {
public static void main(String[] args) {
Person person = new Person("John", "1 John Deer Rd", "1112223333");
Person pupil = new Pupil("Jane", "2 John Deer Rd", "1112223333", "junior");
System.out.println(pupil.name + "'s phone is " + pupil.phone + " and their address is " + pupil.address + "." + "\n");
}
}
如何同时显示 rank
?
您可以使用 Pupil 的构造函数代替 Person 的构造函数
public class Pupil extends Person {
public String rank;
public Pupil (String name, String address, String phone, String rank) {
super(name, social, phone);
}
}
Pupil pupil = new Pupil("Jane", "2 John Deer Rd", "1112223333", "junior");pupil = new Pupil("Jane", "2 John Deer Rd", "1112223333", "junior");
System.out.println(pupil.name + "'s phone is " + pupil.phone + " and their address is " + pupil.address + "." + "\n"+pupil .rank);
我建议使用 getter 和 setter 方法并使用它们并将您的字段设为私有。 您可以阅读 more about setter and getter methods 一个简单的例子:
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name =name;
//get name parameter and set it to this class'sname parameter }
最后但同样重要的是,我建议您阅读 this keyword 开心点。
您必须将对象从 Person
转换回 Pupil
:
((Pupil)pupil).rank
如果您不能 100% 确定您的对象实际上是一个 Pupil,您应该添加完整性检查:
if(pupil instanceof Pupil) {
System.out.println(…+((Pupil)pupil).rank+…);
}