java - 我可以在 Java 中使用子类对象作为参数来覆盖吗?

标签 java inheritance overriding

我有如下类(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/

相关文章:

java - 如何从异步任务中的 JSON 查询返回多个字符串?

c# - 在 C# 中调用基本构造函数

ios - 两个类,相同的属性名称,不同的类型 -> 被覆盖

c++ - 覆盖父类(super class)成员

java - BouncyCaSTLe 版本冲突,厂商不合作

java - 多个用户可以同时使用同一个 Microstream 数据库吗?

java - 如何用 Java 将这张数字表打印到控制台?

inheritance - 重写派生类中的静态字段时出现“...不正确地扩展基类静态端”错误

python - Numpy 函数破坏了我继承的数据类型

Java - 方法未被覆盖,但仍不显示错误