我的课程如下
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)作为基类中的Object。 在方法MoreUseful.g()中我使用超类参数(Object)作为基类中的String。
是否可以覆盖这些方式? 以上两种情况中的哪一种是正确的覆盖?
答案 0 :(得分:0)
不,这是不可能的,并且会违反LSP。
通过继承自类,您表示您的子类MoreUseful
实际上是Useful
,因此公开了 Useful
公开的所有功能。如果您删除了使用对象调用f
的功能,那么您就可以打破这一承诺。
您可以重载 f
,因此您可以使用f(String s)
方法。
答案 1 :(得分:0)
确实覆盖了g()
方法。但是,f()
未被覆盖 - 它重载。验证这一点的一种简单方法是在要覆盖的每个方法上添加@Override
- 如果它导致编译错误,则表示您没有正确覆盖。