java - 需要帮助来理解 java 中的向下转型

标签 java casting downcast

我正在尝试(研究如何)利用创建抽象类然后创建子类等的优势。 我有父类(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/

相关文章:

java - ConcurrentHashMap 在我的 Java Web 应用程序中陷入无限循环?

ios - 如何在 Swift 中使用 NSNotification -> userInfo 发送对象数组

cArray[][] 指针数组转换

c++ - 从父类向下转换元素

java - 登录时显示用户电子邮件 (JSF 2.0)

java - 使用 Java BigInteger 从 g^(xr) 和 x 计算 g^r

Flutter 将 RenderObject 转换为 RenderBox

java - Java 中的类型转换/向下转换

java - Java 方法调用时自动向下转型

java - Apache HttpComponents 代码导致线程阻塞