gpt4 book ai didi

java - 如何通过使用父类(super class)来减少代码?

转载 作者:IT老高 更新时间:2023-10-28 20:47:39 24 4
gpt4 key购买 nike

我想重构一些目前由一个父类(super class)和两个子类组成的代码。

这些是我的类(class):

public class Animal {
int a;
int b;
int c;
}

public class Dog extends Animal {
int d;
int e;
}

public class Cat extends Animal {
int f;
int g;
}

这是我当前的代码:

ArrayList<Animal> listAnimal = new ArrayList<>();

if (condition) {
Dog dog = new Dog();
dog.setA(..);
dog.setB(..);
dog.setC(..);
dog.setD(..);
dog.setE(..);
listAnimal.add(dog);

} else {
Cat cat = new Cat();
cat.setA(..);
cat.setB(..);
cat.setC(..);
cat.setF(..);
cat.setG(..);
listAnimal.add(cat);
}

如何重构有关公共(public)属性的代码?

我想要这样的东西:

Animal animal = new Animal();
animal.setA(..);
animal.setB(..);
animal.setC(..);

if (condition) {
Dog anim = (Dog) animal; //I know it doesn't work
anim.setD(..);
anim.setE(..);
} else {
Cat anim = (Cat) animal; //I know it doesn't work
anim.setF(..);
anim.setG(..);
}

listAnimal.add(anim);

最佳答案

拥有 Animal 类型的变量的想法很好。但你也必须确保使用正确的构造函数:

Animal animal; // define a variable for whatever animal we will create

if (condition) {
Dog dog = new Dog(); // create a new Dog using the Dog constructor
dog.setD(..);
dog.setE(..);
animal = dog; // let both variables, animal and dog point to the new dog
} else {
Cat cat = new Cat();
cat.setF(..);
cat.setG(..);
animal = cat;
}

animal.setA(..); // modify either cat or dog using the animal methods
animal.setB(..);
animal.setC(..);

listAnimal.add(animal);

提示:如果 Animal 总是 Cat 或 Dog,请考虑将 Animal abstract。然后,每当您尝试执行 new Animal() 时,编译器都会自动报错。

关于java - 如何通过使用父类(super class)来减少代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52513557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com