java - 参数中的 Java 多态性
问题描述
我遇到了多态函数调用的问题。我检查了其他问题,但那些只询问了没有参数的函数。就我而言,我需要使用参数,因此它决定运行哪个方法,具体取决于输入参数的类。
我想要做的是有一个动物列表,里面装满了狗、猫等,当我调用每个 .hits(otherAnimal) 方法时,它应该以其他动物的类作为输入参数运行该函数。例如: dog hits cat -> dog.hits(Cat c) 应该被调用。对于通过 Animal 列表的迭代,我需要 hits(Animal a) 抽象函数,否则它不起作用。但正因为如此,现在只调用 .hits(Animal a) 函数,而不是以给定子项作为参数的函数。我知道我做错了什么,只是想不通,是什么。希望有人能启发我!
也许示例代码可以更好地解释它想要做什么,所以这里是:
public class PolyTest {
public static void main(String[] args) {
LinkedList<Animal> aList = new LinkedList<Animal>();
aList.add(new Dog(4,"wof"));
aList.add(new Cat(3, "mewoo"));
//every animal hits itself and every other animal
for(int i=0; i<aList.size(); i++) {
for(int j =0; j<aList.size(); j++) {
aList.get(i).hits(aList.get(j));
}
}
}
}
动物类:
public abstract class Animal {
int legNum;
String sound;
public Animal(int legNum, String sound) {
this.legNum = legNum;
this.sound = sound;
}
abstract void hits(Animal a);
}
狗
public class Dog extends Animal{
public Dog(int legNum, String sound) {
super(legNum, sound);
}
@Override
public void hits(Animal a) {
System.out.println("Dog: Animal case");
}
public void hits(Dog d) {
System.out.println("Dog: pats other dog head");
}
public void hits(Cat c) {
System.out.println("Dog: hits cat");
}
}
猫
public class Cat extends Animal {
public Cat(int legNum, String sound) {
super(legNum, sound);
}
@Override
public void hits(Animal a) {
System.out.println("Cat: Animal case");
}
public void hits(Cat c) {
System.out.println("Cat: Purrs with cat");
}
public void hits(Dog d) {
System.out.println("Cat: Runs away");
}
}
解决方案
推荐阅读
- linux - shell脚本中字符串变量中的特殊字符
- java - 如何在 Spring Data jpa 中应用本机联接查询?
- android - 如何解决 java.io.IOException: No such file or directory or Permission denied issue on execution sh file from android in windows machine
- microsoft-information-protection - Microsoft 信息保护 SDK 1.7.133 - 加载库失败问题错误
- docker - 在 docker 中安装 Activeperl 需要 Uri
- integromat - 对 webhook 的第一个请求
- flutter - Flutter Dio 拦截器:DioError [DioErrorType.DEFAULT]:错误状态:无法完成最终的 MultipartFile
- angular - Angular 8“ngIf”条件未按预期工作
- fortigate - 如何阻止从 fortigate 到 fortiguard 服务器和 FDN 的所有连接
- azure - 基于队列触发的功能应用程序未完成