你真的想将你的父类转换为子类吗?如果给定的对象(作为父对象给出)是作为子类创建的,则可以在不进行转换的情况下访问正确的函数。这里有一个例子:
在主函数中,您可以看到一个向量“ps”来存储父对象,但添加的是从父类继承的子对象。当迭代该向量时,我不知道下一个子对象是哪种类型(因此无法转换为正确的类),但由于调用的函数具有覆盖关键字,因此使用了正确的子类/方法。
import java.util.Vector;
import lib.Parent;
import lib.C1;
import lib.C2;
public class MyClass {
public static void main(String []args){
System.out.println("Hello World");
C1 c1 = new C1();
C2 c2 = new C2();
ps.add(c1);
ps.add(c2);
for(int k = 0; k < ps.size(); k++){
ps.get(k).setInteger();
System.out.println("stored entity " + ps.get(k).i);
}
for(Parent p: ps){
p.setInteger();
System.out.println("stored entity " + p.i);
}
}
static Vector<Parent> ps = new Vector<>();
}
父类:关键字
abstract强制每个子类实现该方法,因此如果您有一个父对象,可以安全地调用此方法。由于父类本身是抽象的,因此您不会拥有仅为父对象的对象,因为这是不允许且无法编译的。
package lib;
public abstract class Parent{
public Integer i;
public abstract void setInteger();
}
这里有两个子类,它们对于 setInteger() 方法有不同的实现。
package lib;
import lib.Parent;
public class C1 extends Parent{
@Override
public void setInteger(){
i = new Integer(1);
}
}
第二个子元素:
package lib;
import lib.Parent;
public class C2 extends Parent{
@Override
public void setInteger(){
i = new Integer(2);
}
}
输出是
stored entity 1
stored entity 2
stored entity 1 <
stored entity 2 <
编辑:
|-MyClass.java
|-lib
|-Parent.java
|-C1.java
|-C2.java
文件结构看起来像这样。
parent
是什么类型? - Mureiniknew Child()
而不是new Parent()
。 - JesperParent
类的实例,则无法将这些对象转换为Child
类。您是否真的需要继承?您可以在父类上有一个名为“type”的字段来确定所涉及的对象(子类)的类型吗? - Mick Mnemonic