Java调用子类方法

rof*_*eka 2 java arraylist superclass

当我尝试创建一个类的实例并将其添加到我的arraylist时,我无法调用子中定义的方法.

我如何使这项工作?

列表类:

import java.util.*;
public class List {
  private ArrayList<Person> persons;
  public List(){
    persons = new ArrayList<Person>();
  }
  public void addAssistant(){
    Person person = new Assistant();
    persons.add(person);
    if(person instanceof Assistant){
      person.assist();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

人员类:

public class Person {
  public Person(){}
}
Run Code Online (Sandbox Code Playgroud)

助理班:

public class Assistant extends Person {
  public Assistant(){}
  public void assist(){
     System.out.println("I am assisting!");
  }
}
Run Code Online (Sandbox Code Playgroud)

编译器:line:person.assist(); 在List类的addAssistant()方法中.

编译器错误:编译器找不到符号 - 方法辅助().

NPE*_*NPE 8

你需要一个明确的演员:

if(person instanceof Assistant){
  ((Assistant)person).assist();
}
Run Code Online (Sandbox Code Playgroud)

但是,我认为通常不鼓励这种逻辑.