我试图让这个Accessor / Mutator组合下来,我遇到了麻烦。我正在学习java,这是我不能做的一件事。
public class Airport extends mainClass {
public String ID;
//Accessor
public String getID() {return this.ID;}
//Mutator
public void setID(String ID){this.ID = "SAN";}
}
并扩展了下面显示的主要部分。
public class mainClass {
public static void main(String[] args) {
Airport SanDiego = new Airport();
System.out.println(SanDiego.getID());
}
}
运行时,输出为" null"。关于如何从主窗体中获取ID以不返回null的建议以及如何清理代码将非常感谢,谢谢。
答案 0 :(得分:2)
正如cacho所说,你没有为ID分配值。
为了提供更详尽的解释,Java的默认构造函数是一个无效的构造函数 - 这意味着它将调用超类的构造函数,然后它将分配"空白"所有类字段的值(引用变为null,整数变为0等)。
虽然cacho的解决方案可行,但你也可以定义一个这样的构造函数:
public class Airport extends mainClass {
//...
//Constructor
public Airport(String ID){this.ID = ID;}
}
此外,您的setID非常奇怪 - 它始终将ID设置为" SAN"。我想你可能想要这样的东西:
public void setID(String ID){this.ID = ID;}
当然,您现在可以使用新的构造函数:
Airport SanDiego = new Airport("SAN");
答案 1 :(得分:0)
您没有在任何地方调用方法setID( )
,这就是原因。
试试这个:
public class mainClass {
public static void main(String[] args) {
Airport SanDiego = new Airport();
SanDiego.setID("this string is not important, since you are setting the value to SAN anyway");
System.out.println(SanDiego.getID());
}
}
那应该有用。但是,我无法理解你在这里想要达到的目标。
答案 2 :(得分:0)
首先需要设置ID属性,方法是使用为ID传入的参数重载默认构造函数,或者在实例化对象后调用setID()。