Java 虽然我';我为我的对象属性定义了值,但它们都变为空?为什么?

Java 虽然我';我为我的对象属性定义了值,但它们都变为空?为什么?,java,inheritance,Java,Inheritance,我有一个名为building的ArrayList存储名为Residence的超级类的实例。(此时,我只定义了一个子类,称为Manager)。如果位置是m,我尝试从文本文件中读取(管理器的缩写),创建一个名为“mng”类型管理器的对象,并将其存储在building中。当我读取文件时没有问题,但是一旦我在构造函数中插入值,值就会变为null 这是我的住宿课: public class Residence { String posision; String username;

我有一个名为
building
ArrayList
存储名为
Residence
的超级类的实例。(此时,我只定义了一个子类,称为
Manager
)。如果位置是
m
,我尝试从文本文件中读取(管理器的缩写),创建一个名为“mng”类型管理器的对象,并将其存储在
building
中。当我读取文件时没有问题,但是一旦我在构造函数中插入值,值就会变为null

这是我的住宿课:

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());
        }
    }

值得一提的是,单元的大小更改为1,但所有属性的值均为null。

如果要初始化变量,必须从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;
  }
}

由于您一直在重写变量,因此如果要分配值,必须重新初始化它们。但是,如果您要继承相同的变量,就没有必要重写它们。(注:变量通常应设置为private并使用getter和setter)

您确定要使用
hasNext()
而不是
hasNextLine()
,然后根据行进行读取吗?在
manager
中,您的所有字段都有两个版本。一套在
住宅
类中,一套在
经理
类中。
manager
中声明的字段从未初始化,因此它们默认为
null
。要了解我的意思,请更改
返回用户名
返回super.username说真的,你的代码是混乱的,没有充分的理由。您违反了java命名约定(类名以大写字母开头);你的变量名称很糟糕:p,u,n,pas。。。他们是什么意思?告诉你:它们毫无意义。使用能说明其背后的东西的名称!并且:在Person类中使用默认构造函数是没有意义的。@Makoto我在文本中插入数据的方式是每行一个单词。所以我认为使用hasNext()或hasNextLine()都不会有问题。如果我错了,请随时纠正我,这正在发生。
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;
  }
}