说我有以下课程
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 类中的函数。有没有办法做我想做的事?
您需要在左侧使用正确的 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().
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |