当前位置:  开发笔记 > 编程语言 > 正文

是否可以使用扩展超类的方法参数的参数覆盖超类的方法?

如何解决《是否可以使用扩展超类的方法参数的参数覆盖超类的方法?》经验,为你挑选了1个好方法。

说我有一个像这样的课程:

abstract class Something {}

它具有一个带有扩展它的类的层次结构:

class FirstSomething extends Something {}
class SecondSomething extends Something {}

然后在其他地方,我有一堂课利用了这些东西:

abstract class A {
    public void setSomething(Something something) {
        //Process the something
    }
}

我是否可以指定A的子类,以便使用更具体的“某物”类覆盖setSomething方法?这就是我想要做的:

class B extends A {
    @Override
    public void setSomething(FirstSomething something) {
        //Process the something
    }

class C extends A {
    @Override
    public void setSomething(SecondSomething something) {
        //Set the something
    }

目前,我正在A类中执行以下操作:

public void setSomething(Something something) {
    checkClass(something);
    //Use the something
}
protected abstract void checkClass(Something something);

如果SuperSomething的类型不适合这些类,则B类和C类在checkClass方法中引发异常。

编辑:我已经尝试使用上述确切的方法签名,但是子类方法不会覆盖超级方法,我想我真的是在问:有没有一种方法可以在超级类的定义中指定一个方法,是否在编译时检查超类的子类的setSomething方法中允许的对象类型?



1> Alexis C...:

您可以通过指定类型可以是A类Something或它的子类之一来使A类通用(我已将setSomething方法抽象化,但可以根据需要提供实现)。

abstract class A  {
    public abstract void setSomething(T something);
}

然后,将类型T强制为您想要在子类中使用的特定类。

class B extends A {
    @Override
    public void setSomething(FirstSomething something) {
        //Set the something
    }
}

class C extends A {
    @Override
    public void setSomething(SecondSomething something) {
        //Set the something
    }
}

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有