对象 returns 空

Object returns null

总结: Java 的新手,尝试浏览其他帖子但没有找到答案。我正在学习继承,并且有一个 AddressBook class 由 Runner class 扩展。当我编写程序来测试继承时,我创建了一个 Runner 对象。如果我得到第一个字符串参数,它 returns 很好,但是当我尝试获取第二个字符串参数时,它 returns 为空。

问题: 为什么第二个参数返回null?

package Assignment_1;

//Begin Class Definition

public class AddressBook { 

// Member variables
 
 private String businessPhone;
 private String cellPhone;
 private String facebookId;
 private String firstName;
 private String homeAddress;
 private String homePhone;
 private String lastName;
 private String middleName;
 private String personalWebSite;
 private String skypeId;

//Constructors
 
 public AddressBook (String firstName, String middleName, String lastName, String homeAddress, String businessPhone, String homePhone, String cellPhone, String skypeId, String facebookId, String personalWebSite) {
  this.firstName = firstName;
  this.middleName = middleName;
  this.lastName = lastName;
  this.homeAddress = homeAddress;
  this.businessPhone = businessPhone;
  this.homePhone = homePhone;
  this.cellPhone = cellPhone;
  this.skypeId = skypeId;
  this.facebookId = facebookId;
  this.personalWebSite = personalWebSite;
 }
 
 public AddressBook (String firstName) {
  this.firstName = firstName;
 }
 
 public AddressBook(String firstName, String middleName) {
  this.firstName = firstName;
  this.middleName = middleName;
 }
 
 public AddressBook (String firstName, String middleName, String lastName) {
  this.firstName = firstName;
  this.middleName = middleName;
  this.lastName = lastName;
 }
 
// Getters and setters
 
 public String getFirstName() {
  return firstName;
 }
 
 public String getMiddleName() {
  return middleName;
 }
  
 public String getLastName() {
  return lastName;
 }
   
 public String getHomeAddress() {
  return homeAddress;
 }
 public String getBusinessPhone() {
  return businessPhone;
 }
 
 public String getHomePhone() {
  return homePhone;
 }
 
 public String getCellPhone() {
  return cellPhone;
 }
 
 public String getSkypeId() {
  return skypeId;
 }
 
 public String getFacebookId() {
  return facebookId;
 }
 
 public String getPersonalWebsite() {
  return personalWebSite;
 }
 
 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }
 
 public void setMiddleName(String middleName) {
  this.middleName = middleName;
 }
 
 public void setLastName(String lastName) {
  this.lastName = lastName;
 }
  
 public void setHomeAddress(String homeAddress) {
  this.homeAddress = homeAddress;  
 }
   
 public void setBusinessPhone(String businessPhone) {
  this.businessPhone = businessPhone;
 }
 
 public void setHomePhone(String homePhone) {
  this.homePhone = homePhone;
 }
   
 public void setCellPhone(String cellPhone) {
  this.cellPhone = cellPhone;
 }
  
 public void setSkypeId(String skypeId) {
  this.skypeId = skypeId;
 }
  
 public void setFacebookId(String facebookId) {
  this.facebookId = facebookId;
 }
 
 public void setPersonalWebSite(String personalWebSite) {
  this.personalWebSite = personalWebSite;
 }
  
 // Public methods
 
 public static void compareNames(String name1, String name2) {
  
  if(name1.equals(name2)) {
   System.out.println(name1);
   System.out.println(name2);
   System.out.println("The names are the same.");
  } else {
   System.out.println(name1);
   System.out.println(name2);
   System.out.println("The names appear to be different.");
  }
  
 } 
  
************************************************************
package Assignment_1;

public class BanffMarathonRunner extends AddressBook {

 // Member variables
 private int time;
 private int years;
  
 // Constructors
 
 public BanffMarathonRunner(String firstName, String lastName, int min, int yr) {
  super(firstName, lastName);
  time = min;
  years = yr;  
 
 }
  
 // Getters and Setters
 
 public int getTime() {
  return time;
 }
 
 public void setTime(int time) {
  this.time = time;
 }
 
 public int getYears() {
  return years;
 }
 
 public void setYears(int years) {
  this.years = years;
 }

}
************************************************************

package Assignment_1;

import Assignment_1.BanffMarathonRunner;

public class TestBanffMarathonRunner {
 public static void main(String[] args) {
 
  BanffMarathonRunner r1 = new BanffMarathonRunner("Elena", "Brandon", 341, 1);

  System.out.print(r1.getLastName());
      
 }

}
}

因为 lastName 为空。

您正在呼叫AddressBook(String firstName, String middleName)

并设置 middleName,而不是 lastName

BanffMarathonRunner r1 = new BanffMarathonRunner("Elena", "Brandon", 341, 1);

来电:

// firstName = "Elena"
// lastName = "Brandon"
// min = 341
// yr = 1
public BanffMarathonRunner(String firstName, String lastName, int min, int yr) {
    super(firstName, lastName);
    // ...
}

通过 super(...) 调用:

// firstName = "Elena"
// middleName = "Brandon" <-- here is your issue
public AddressBook(String firstName, String middleName) {
    this.firstName = firstName;
    this.middleName = middleName;
}

Brandon 设置在 AddressBook#middleName 而不是 AddressBook#lastName.

您的问题在 BanffMarathonRunner.java:

在构造函数中调用

super(firstName, lastName);

实际上通过上面的调用调用了带有两个参数的超级 class 构造函数,并且该构造函数是设置 middleName 而不是 lastName 的构造函数。

我认为您对 lastName 变量名感到困惑,该变量名通过两个参数传递给构造函数,而该构造函数使用第二个参数来设置中间名。

祝你好运。