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