我正在尝试(研究如何)利用创建抽象类然后创建子类等的优势。 我有父类(super class) Person:
public abstract class Person {
private String name;
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
和子类,例如:
public class Man extends Person{
private String occupation;
public void setOccupation(String occupation) {
this.occupation = occupation;
}
public String getOccupation() {
return occupation;
}
@Override
public void setType(String type) {
super.setType(type);
}
@Override
public String getType() {
return super.getType();
}
@Override
public void setName(String name) {
super.setName(name);
}
@Override
public String getName() {
return super.getName();
}
}
和一个少年:
public class Teenager extends Person{
private String stdyPlace;
public String getStdyPlace() {
return stdyPlace;
}
public void setStdyPlace(String stdyPlace) {
this.stdyPlace = stdyPlace;
}
@Override
public void setType(String type) {
super.setType(type);
}
@Override
public String getType() {
return super.getType();
}
@Override
public void setName(String name) {
super.setName(name);
}
@Override
public String getName() {
return super.getName();
}
因此,我还想根据对象类型执行不同的操作。我想要这样的东西:
Person pM;
switch (typeOfPerson){
case "Man": pM=new Man(); pM.setOccupation("military"); ...other acts that regards this type of object...; break; //doesn't work
case "Student": pM=new Teenager(); pM.setStdyPlace("Boston"); ...other acts that regards this type of object...; break; //doesn't work too
}
pM.setName(en);
pM.setType(tp);
但问题是,pM 的行为就像一个人。我找不到如何将其转换为我想要的类型。问题是:怎么投?
最佳答案
使用instanceof
操作符:
if (pM instanceof Man) {
Man m = (Man) pM;
//use 'Man' methods
}
这会告诉您类实例是否是子类的一种类型。如果您不知 Prop 体的类类型并且想要向下转型,则应该这样做。
关于java - 需要帮助来理解 java 中的向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36991603/