对象返回null - java

摘要:
Java的新手,尝试浏览其他帖子,但没有找到答案。我正在学习继承,并具有由Runner类扩展的AddressBook类。当我编写一个程序来测试继承时,我创建了一个Runner对象。如果获取第一个String参数,它将返回正常值,但是当我尝试获取第二个String参数时,它将返回null。

题:
为什么第二个参数返回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());
						
	}

}
}

参考方案

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

Java:找到特定字符并获取子字符串 - java

我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

对象比较是否相等:JAVA - java

public ClassA { private String firstId; private String secondId; public void setFirstId(String firstId) { this.firstId = firstId; } public String getFirstId() { return id; } public…

解析文档时如何用另一个字符串替换文档中字符串的一部分 - java

我有一个解析的PDF文档,我使用Java中的一个库进行了解析。问题是文档中的表没有正确解析,它像文本(逐行)一样被解析。因此,我在Python中使用了一个名为Camelot的库,该库为我提供了已解析的表格式,并将其发送给Java。我需要用来自Camelot的PDF解析表替换PDF解析表,并保持其余部分不变。文档中有多个表,因此已解析的表以字符串列表的形式返回…

测试hashCode的字符串 - java

我正在编写如下所示的代码:String s1=new String("hi"); System.out.println(s1.hashCode()); String s2=new String("hi"); System.out.println(s2.hashCode()); String s3=s1.intern()…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…