我有如下类(class)
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");
}
}
我正在尝试覆盖基类方法,但我正在更改派生类中的参数。 在方法 MoreUseful.f() 中,我使用子类参数 (String) 作为基类中的对象。 在方法 MoreUseful.g() 中,我使用父类(super class)参数 (Object) 而不是基类中的 String。
是否有可能覆盖这些方式? 以上两种情况中哪一种是正确的重写?
最佳答案
不,那是不可能的,而且会违反 LSP .
通过从一个类继承,您表明您的子类 MoreUseful
实际上是一个 Useful
,因此公开了 的所有功能
有用的 公开。如果你删除了使用对象调用 f
的能力,你就会违背这个 promise 。
您可以自由地重载 f
,这样您就有了一个f(String s)
方法。
关于java - 我可以在 Java 中使用子类对象作为参数来覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23015807/