我有一个名为 building
的 ArrayList
,它存储名为 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/