在向下转换中对子类执行方法

时间:2018-05-17 16:50:37

标签: java

如何在向下转换对象时执行为子类字段生成数据的方法?

例如:

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";
  }
}

3 个答案:

答案 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以外的选项包括以下内容:

  1. animalParameter.getClass() == Dog.class
  2. animalParameter.getClass().isAssignableFrom(Dog.class)
  3. Dog.class.isAssignableFrom(animalParameter.getClass()
  4. 选项2和3之间的区别是"哪个类是另一个类的超类"。