抽象class还是铸造?
Abstract class or casting?
我试图弄清楚在抽象超级class 中实现子class 的各个方法,还是强制转换是处理以下场景的更好方法。
假设我有一个摘要 class Animal
,它有两个子 classes,Dog
和 Cat
以及一个 Main
class 其中我将 Dog
和 Cat
的对象保存在 Animal
数组中。以下是我将如何在更通用的数组中使用 subclasses 的方法。
class Main{
public static void main(String[] args){
Animal[] animalArray = new Animal[2];
animalArray[0] = new Cat();
animalArray[1] = new Dog();
for (Animal a : animalArray){
if (a.getClass().equals(Dog.class){
((Dog)a).bark();
} else {
((Cat)a).meow();
}
}
}
}
但是一位朋友建议转换不是最佳实践,我应该按以下方式在抽象 superclass 中定义每个方法:
public abstract class Animal{
public abstract String meow(){
return null;
}
public abstract String bark();
return null;
}
}
将这些方法的 return 值设置为 null
后,我需要使用 @Override
并在各自的子 class 中实现它们。
哪种方式更好?恐怕抽象 class 会太大并且将分配给子 class 的方法没有意义(即使他们所做的只是 return null
).我认为通过使用转换我可以更精确地使用这些方法。
meow()
和 bark()
不应在 Animal
class 中定义。这些方法特定于 Cat
和 Dog
classes。
您应该定义一个 abstract
方法,如下所示,在 Animal
class 和 override
子 classes.
中
public abstract class Animal {
public abstract String action() {};
}
public class Dog extends Animal {
@Override
public String action() {
//your implementation (bark)
}
}
public class Cat extends Animal {
@Override
public String action() {
//your implementation (meow)
}
}
希望它能回答您的问题。
我试图弄清楚在抽象超级class 中实现子class 的各个方法,还是强制转换是处理以下场景的更好方法。
假设我有一个摘要 class Animal
,它有两个子 classes,Dog
和 Cat
以及一个 Main
class 其中我将 Dog
和 Cat
的对象保存在 Animal
数组中。以下是我将如何在更通用的数组中使用 subclasses 的方法。
class Main{
public static void main(String[] args){
Animal[] animalArray = new Animal[2];
animalArray[0] = new Cat();
animalArray[1] = new Dog();
for (Animal a : animalArray){
if (a.getClass().equals(Dog.class){
((Dog)a).bark();
} else {
((Cat)a).meow();
}
}
}
}
但是一位朋友建议转换不是最佳实践,我应该按以下方式在抽象 superclass 中定义每个方法:
public abstract class Animal{
public abstract String meow(){
return null;
}
public abstract String bark();
return null;
}
}
将这些方法的 return 值设置为 null
后,我需要使用 @Override
并在各自的子 class 中实现它们。
哪种方式更好?恐怕抽象 class 会太大并且将分配给子 class 的方法没有意义(即使他们所做的只是 return null
).我认为通过使用转换我可以更精确地使用这些方法。
meow()
和 bark()
不应在 Animal
class 中定义。这些方法特定于 Cat
和 Dog
classes。
您应该定义一个 abstract
方法,如下所示,在 Animal
class 和 override
子 classes.
public abstract class Animal {
public abstract String action() {};
}
public class Dog extends Animal {
@Override
public String action() {
//your implementation (bark)
}
}
public class Cat extends Animal {
@Override
public String action() {
//your implementation (meow)
}
}
希望它能回答您的问题。