繁体   English   中英

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

[英]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之外,其他选项包括:

  1. animalParameter.getClass() == Dog.class
  2. animalParameter.getClass().isAssignableFrom(Dog.class)
  3. Dog.class.isAssignableFrom(animalParameter.getClass()

选项2和3之间的区别是“哪个类是另一个的超类”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM