调用对象的获取名称方法 returns null

Calling a get name method for an object returns null

我有一个方法遍历 ArrayList 'Clearance' 中的每个元素,如果它是 HighClearance 的一个实例,我想将它添加到名称的字符串列表中。 问题:每当我调用 'Clearance' superclass 中的 getName() 方法时,它只是 returns null 并发送 return 名称。

public static String peopleClearance (ArrayList<Clearance> clearances) {
        String names = "";
    for(Clearance c: clearances) {
        if(c instanceof HighClearance) {
            System.out.println(c.getName()); //tested using sysout statement, just prints ''
            names += c.getName();
        }
    }
    return names;
}

在主要方法中:

注:Clearance中的构造函数class:public Clearance(String pname)

ArrayList<Clearance> clear= new ArrayList<Clearance>();
clear.add(new HighClearance("Mike"));
clear.add(new HighClearance("John"));
System.out.println(peopleClearance(clear));

如果您的 superclass/subclass 使用的名称 属性 正确,请检查此工作示例:

import java.util.ArrayList;
import java.util.List;

public class Example {
  public static void main(String[] args) {

    List<Clearance> clearances = new ArrayList<>();
    clearances.add(new Clearance("C-Tes"));
    clearances.add(new HighClearance("H-Test"));
    clearances.add(new Clearance("CC-Test"));
    clearances.add(new HighClearance("HH-Test"));

    System.out.println(peopleClearance(clearances));
  }

  // changed the parameter to List interface instead of ArrayList
  public static String peopleClearance(List<Clearance> clearances) {
    String names = "";
    for (Clearance c : clearances) {
      if (c instanceof HighClearance) {
        System.out.println(c.getName()); // tested using sysout statement, just prints ''
        names += c.getName();
      }
    }
    return names;
  }
}

class Clearance {
  private String name;

  public Clearance(String name) {
    super();
    this.name = name;
  }

  public String getName() {
    return name;
  }
}

class HighClearance extends Clearance {
   // if required!
  public HighClearance(String name) {
    super(name);
  }
}