Java初始化子类
初始化接口的已实现类(由某些逻辑确定)的适当方式是什么 范例Java初始化子类,java,instantiation,subclass,Java,Instantiation,Subclass,初始化接口的已实现类(由某些逻辑确定)的适当方式是什么 范例 IAnaimal is an interface Cat -> IAnimal Dog -> IAnimal Cow -> IAnimal int x = in.nextInt(); IAnimal animal = null; if(x==1) animal = new Dog(); else if(x==2) animal = new Cat(); else animal = new Cow();
IAnaimal is an interface
Cat -> IAnimal
Dog -> IAnimal
Cow -> IAnimal
int x = in.nextInt();
IAnimal animal = null;
if(x==1)
animal = new Dog();
else if(x==2)
animal = new Cat();
else
animal = new Cow();
animal.destroyManKind();
这是正确的方法吗?有没有一种更专业的方法可以做到这一点?假设他们有一个普通的超类动物,它可能有一个接受int的静态生成器方法,你可以这样做
IAnimal animal = Animal.build(x);
在哪里
public class Animal{
public static IAnimal build(int x){
if(x==1) return new Dog();
else if(x==2) return new Cat();
return new Cow();
}}
你的做法没有错。您也可以查看。我有一种更清晰的方式来读取名称,而不是1、2和3,但在这种情况下,您可以使用开关
int choice = in.nextInt();
switch(choice) {
case 1: animal = new Dog(); break;
case 2: animal = new Cat(); break;
default: animal = new Cow(); break;
}
或者使用字符串开关
String choice = in.next();
switch(choice.toLowerCase()) {
case "dog": animal = new Dog(); break;
case "cat": animal = new Cat(); break;
case "cow": animal = new Cow(); break;
default: // error
}
我更喜欢动物阵列
IAnimal animal = null;
IAnimal [] animals ={null,new Dog(),new Cat(),new Cow()};
animal = animals[x]
您确定
Cow
是一个有用的默认值吗?在.next()中的来自哪里?你可以使用开关而不是if-else of-else`它比你想象的要简单得多:1)一个“接口”是由一个具体的类实现的。2) 具体类由其构造函数初始化。就这么简单!:)您可以简单地使用相同类
或直接类型的引用和对象<代码>狗d=新狗()代码>这是设计模式参考吗?我是说,我同意。我想做这样的事情。那个构建方法是什么样子的?我假设这会把IAnaimal变成一个抽象类?我不喜欢这种方法。您正在实例化3个对象,而您只需要一个。
switch (x){
case 1:
animal = new Dog();
break;
case 2:
animal = new Cat();
break;
default
animal = new Cow();
}