如何在向下转换对象时执行为子类字段生成数据的方法?
例如:
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";
}
}
答案 0 :(得分:0)
喜欢这个吗?
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";
}
}
答案 1 :(得分:0)
最好在超类中移动lastname。没有很好的设计有超类取决于子类结构。您可以将Animal设置为抽象类型,并将可覆盖的方法定义为受保护的
答案 2 :(得分:0)
为了这个问题, 我会假装需要向下转换 多态性不是一个有效的解决方案。
使用类似以下的代码向下转换为a
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之间的区别是"哪个类是另一个类的超类"。