获取子类

时间:2014-02-07 20:29:04

标签: java oop casting subclass superclass

这是我的简短示例。超类:

public abstract class SuperClass
{
    public SubClass getSubClass()
    {
        return null;
    }
}

SubClass扩展SuperClass:

public class SubClass extends SuperClass
{
    public SubClass getSubClass()
    {
        return this;
    }

    public static void doSomething(SuperClass instance)
    {
        if(instance instanceof SubClass)
        {
            //Option 1:
            SubClass example1 = instance.getSubClass();
            //Option 2:
            SubClass example2 = (SubClass)instance;
        }
    }
}

我的问题是,什么是最好的(并且没有任何警告)获得SubClass的方式?

在选项1中,我将得到2个警告(1.在SuperClass#getSubClass中,Class引用Subclass,2。在SubClass#getSubClass中它忽略了SuperClass中的方法)。

在选项2中,我会得到1个警告(投射到具体类),我相信选项也会变慢。

还有其他方法可以实现我想要的吗?哪个选项最好?

1 个答案:

答案 0 :(得分:0)

执行此操作的常用方法是通过instanceof运算符,但目前使用它的方式不会添加任何内容(instance必须为instanceof {{1因为它是声明它时的类型。

SuperClass

这不应该给你任何编译器警告。