将对象的类转换为子类

And*_*erg 2 java class object

说我有以下课程

public abstract class Parent {

    public Parent() {
    
        //stuff here
    
    }

}

public class Child extends Parent {

    public Child() {
    
        //stuff here
    
    }

    public void doSomething() {
    
    }

}
Run Code Online (Sandbox Code Playgroud)

然后我从父母数组中获取一个对象

public Parent[] parents = new Parent[5];

Parent tempParent = parents[0]
Run Code Online (Sandbox Code Playgroud)

如果此对象属于子类,我想将 tempParent 转换为子类,以便使用“doSomething”而不必创建新对象

if(tempParent.getClass == Child.class) {

    tempParent = (Child) tempParent;

    tempParent.doSomething();

}
Run Code Online (Sandbox Code Playgroud)

然而,这行不通。我仍然收到一条错误消息,告诉我 doSomething 不是 Parent 类中的函数。有没有办法做我想做的事?

Gho*_*ica 6

您需要在左侧使用正确的 TYPE:

Child someChild = (Child) tempParent;
Run Code Online (Sandbox Code Playgroud)

注:这并没有创建新的对象。

没有具有办法

Parent whatever = (Child) tempParent;
Run Code Online (Sandbox Code Playgroud)

做你想做的事(调用子类方法)!

你看,编译器关心你的引用的“定义”类型,它没有考虑到你最有可能在运行时只是“放入”一些实际上是 Child 实例的引用!

做你想做的事。

并注意:千万不能用比较的对象==。你应该更喜欢打电话equals()。ForClass对象==应该可以工作(大部分时间),但仍然:习惯于使用equals().