我提供了两个类,如下所示:

电器类

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


烤面包机类

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


RunAppliance类

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


作为一个新手,它使我在方法重载和重写之间感到困惑,并且使参数如何影响一种参数类型是另一种参数类型的子类。因此,我为此提出了6个条件:

1)设备类别:无效启动(设备t);烤面包机类别:无效启动(设备t)

2)设备类:void start(Toaster t);烤面包机类:void start(Toaster t)

3)设备类别:无效启动(设备t);烤面包机类:void start(Toaster t)

4)设备类别:无效启动(Toaster t);烤面包机类别:无效启动(设备t))

5)设备类别:无效启动(设备t)和无效启动(烤面包机t);烤面包机类:void start(Toaster t)

6)设备类:无效启动(设备t);烤面包机类别:无效启动(设备t)和无效启动(烤箱t))

有人可以建议我做同样的必要规则吗?

最佳答案

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

您的实现未通过Liskov替代原则。您不能在需要Toaster的任何地方使用Appliance,因为它不会覆盖编写的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/

10-10 07:22