我提供了两个类,如下所示:
电器类
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/