java - 虽然我已经为对象属性定义了值,但是它们都变成了 null?为什么?

标签 java inheritance

我有一个名为 buildingArrayList,它存储名为 Residence 的父类(super class)的实例。 (此时我只定义了一个名为 Manager 的子类)。我想做的是从文本文件中读取位置,如果位置是m,(经理的缩写)创建一个名为“mng”类型管理器的对象并将其存储在building.当我读取文件时没有问题,但是一旦我将值插入到构造函数中,这些值就会变为空。

这是我的居住等级:

public class Residence {
    String posision;
    String username;
    String pass;
    String accNo;
    String type;
    String no;
    public Residence(String p, String u, String pas, String acc, String type, String no) {
        this.posision = p;
        this.username = u;
        this.pass = pas;
        this.accNo = acc;
        this.type = type;
        this.no = no;
    }

    public Residence() {}
}  

经理类:

public class Manager extends Residence {
    public String posision;
    public String username;
    public String pass;
    public String accNo;
    public String type;
    public String no;

    public Manager() {
        super();
    }

    public Manager(String p, String u, String pas, String acc, String type, String no) {
        super(p , u , pas, acc, type , no);
    }

    public String getUsername() {
        return username;
    }
}

这是主要内容:

public static void main(String[] args) {
        File file = new File("E:\\guaz\\eclipse_javafx\\workspace\\dkflozaTesting\\src\\dkflozaTesting\\danial.txt");
        ArrayList<Residence> building = new ArrayList<Residence>();
        String posision = "";
        String username = "";
        String pass = "";
        String accNo = "";
        String type = "";
        String no = "";
        try {
            Scanner scan = new Scanner(file);
            while(scan.hasNext()) {
                posision = scan.next();
                username = scan.next();
                pass = scan.next();
                accNo = scan.next();
                type = scan.next();
                no = scan.next();
                System.out.println(posision + " " + username + " " + pass + " " + type + " " + no);
                if (posision.compareToIgnoreCase("m") == 0) {
                    System.out.println("in if : " + posision + " " + username + " " + pass + " " + type + " " + no);
                    Manager mng = new Manager(posision, username, pass, accNo, type, no);
                    System.out.println("username : " + mng.getUsername());
                    building.add(mng);
                }
            }

            System.out.print("\n \n");
            //System.out.print(list.size());
            //System.out.print(list.get(0).getUsername());
            System.out.print("\n \n");
        } catch(Exception e) {
            System.out.println(e.getLocalizedMessage());
        }
    }

main的输出如下:

t dkfloza pass pre 1
in if : t dkfloza pass pre 1
username : null
m danial pass1 post 2

值得一提的是,公寓的大小变为1,但所有属性的值为空。

最佳答案

如果要初始化变量,则必须从 Manager 类中删除它们。

public class Manager extends Residence {
   public Manager() {
      super();
  }

  public Manager(String p, String u, String pas, String acc, String type,    String no) {
      super(p , u , pas, acc, type , no);
  }

  public String getUsername() {
      return username;
  }
}

由于您已经覆盖了变量,因此如果您想分配值,则必须重新初始化它们。但是,如果继承相同的变量,则没有必要覆盖它们。 (Ps.变量通常应设置为私有(private)并使用getter和setter)

关于java - 虽然我已经为对象属性定义了值,但是它们都变成了 null?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584750/

相关文章:

java+JOGL,绘制纹理时如何设置透明度以显示场景中的对象而不是纯黑色?

Java:多线程访问主线程变量/方法

scala - 为 Scala 特征中的方法指定具体类型

c++ - C++ 中的从属名称与非从属名称

c++ - 不同的行为取决于数据

c++ - 使用派生 [C++] 生成的参数初始化基类

Java多线程同步块(synchronized block)永远循环

java - cURL 发布到 Jenkins 上的 Splunk HEC

java - getter 的良好命名约定

java - 使用 Java 流检查 ArrayList 内容