java - 父类(super class)和子类参数

标签 java inheritance polymorphism overloading overriding

我提供两个类如下:

电器类

public class Appliance {
    void start(Appliance t){
        System.out.println("Start Appliance");
    }
}

toastr 类

public class Toaster extends Appliance {
    void start(Toaster t){
        System.out.println("Start Toaster");
    }
}

运行设备类

public class RunAppliance {
    public static void main(String[] args) {
        Appliance appliance = new Toaster();
        Toaster toaster = new Toaster();
        appliance.start(toaster);
    }
}

作为一个新手,它让我对方法重载和重写感到困惑,以及参数如何在一种参数类型是另一种参数类型的子类中受到影响。因此,我提出了 6 个相同的条件:

1)设备类别:void start(Appliance t); toastr 类:void start(Appliance t)

2)设备类别:void start(Toaster t); Toaster 类:void start(Toaster t)

3)设备类别:void start(Appliance t); Toaster 类:void start(Toaster t)

4)设备类别:void start(Toaster t); toastr 类:void start(Appliance t))

5)设备类别:void start(Appliance t) & void start(Toaster t) ; Toaster 类:void start(Toaster t)

6)设备类别:void start(Appliance t); toastr 类:void start(Appliance t) & void start(Toaster t))

任何人都可以建议我一条必要的规则吗?

最佳答案

您的 Toaster 类不正确。其 start() 方法的参数应该是 Appliance,而不是 Toaster

您的实现不符合里氏替换原则。您不能在任何需要 Appliance 的地方使用 Toaster,因为它不会重写所编写的 start() 方法。

这样做:

public class Toaster extends Appliance {
    void start(Appliance a){
        System.out.println("Start Toaster");
    }
}

关于java - 父类(super class)和子类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34530664/

相关文章:

javac中java自类型递归类型参数和继承错误

c++ - 如何使用虚函数对基类进行抽象?

java - 处理集合对象的增强 for 循环行为

java - 小程序不会计算

java - 无法使用 Bundle 将字符串从一个 fragment 传递到另一个 fragment

javascript - 成员的类继承

java - 子模块中不会继承 Maven 配置文件

java - ArrayList和多态性

c++ - 如果未使用 shared_ptr 定义虚拟析构函数,是否有任何优势

c# - 确定对象的类型