我可以在Java中使用子类对象作为参数重写吗?

我可以在Java中使用子类对象作为参数重写吗?,java,inheritance,overriding,Java,Inheritance,Overriding,我的课程如下 public class Useful { public void f(Object a) { System.out.println("In base f"); } public void g(String a) { System.out.println("In base g"); } } public class MoreUseful extends Useful { public v

我的课程如下

public class Useful 
{
    public void f(Object a)
    {
        System.out.println("In base f");
    }

    public void g(String a)
    {
        System.out.println("In base g");
    }
}

public class MoreUseful extends Useful 
{
    public void f(String a)
    {
        System.out.println("In derived f");
    }

    public void g(Object a)
    {
        System.out.println("In derived g");
    }
}
我试图重写基类方法,但我正在更改派生类中的参数。 在方法morefulsible.f()中,我使用子类参数(字符串)作为基类中的对象。 在方法morefulsible.g()中,我使用超类参数(Object)作为基类中的字符串

有没有可能以这种方式覆盖?
以上两种情况中哪一种是正确的覆盖?

不,这是不可能的,并且会违反规则

通过从类继承,您可以表示您的子类
更有用
实际上是一个
有用
,因此公开了
有用
公开的所有功能。如果您取消了使用对象调用
f
的功能,您将违背这一承诺


您可以随意重载
f
,这样您就有了
f(String s)
方法。

确实覆盖了
g()
方法<但是,code>f()并没有被覆盖-它是超负荷的。验证这一点的一个简单方法是在每个要重写的方法上添加
@Override
——如果它导致编译错误,则说明您没有正确重写。

每当涉及到重写时,请始终使用注释
@Override
,然后编译器本身将告诉您是否无法执行该操作或是否有错误。