[英]Executing a method on subclass in downcasting
在向下转换对象时,如何执行一种方法来为子类字段生成数据?
例如:
public class Animal
{
public string name;
}
public class Dog extends Animal
{
public string lastName;
//I want this method to be called when down casting...
public void generateLastName()
{
this.lastName="Something";
}
}
像这样?
public class Animal
{
public Animal() {
generateLastName();
}
public string name;
public void generateLastName() {}
}
public class Dog extends Animal
{
public string lastName;
//I want this method to be called when down casting...
@Override
public void generateLastName()
{
this.lastName="Something";
}
}
最好在超类中移动姓氏。 具有超类的设计不好取决于子类的结构。 您可以将Animal设置为抽象类型,并将可覆盖的方法定义为protected
出于这个问题,我将假设需要向下转换,并且多态性不是有效的解决方案。
使用与以下类似的代码向下转换为Dog
并访问generateLastName
方法:
public void someMethod(
final Animal animalParameter)
{
if (animalParameter instanceof Dog)
{
final Dog dogParameter = (Dog)animalParameter;
System.out.println("Last name from animalParam: " +
dogParameter.generateLastName());
}
}
除了instanceof
之外,其他选项包括:
animalParameter.getClass() == Dog.class
animalParameter.getClass().isAssignableFrom(Dog.class)
Dog.class.isAssignableFrom(animalParameter.getClass()
选项2和3之间的区别是“哪个类是另一个的超类”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.