0

开发一个小型应用程序,该应用程序允许 DVD 和主角对象从两个不同的类中显示,但我得到以下输出。

person.Person@10ed7f5c

任何人都可以提供任何关于我出错的见解吗?

DVD类

public class DVD {

private String title;
private Person leadActor;
private int noOfStars;


public DVD (String a,Person person, int b) {

title = a;
leadActor = person;
noOfStars = b;   

}    

public String getTitle(){

return title;

}

public void setTitle(String title){

this.title = title;    
}

public Person getLeadActor(){

return leadActor;
}

public void setLeadActor(Person leadActor){

this.leadActor = leadActor;
}

public int getNoOfStars(){

return noOfStars;
}

public void setNoOfStarts(int noOfStars){

this.noOfStars = noOfStars;

}

@Override
public String toString() {

String s = "Title " + title + "/r" + "Actor:" + leadActor + "/r" + noOfStars;

return s;
}

}

人物类

public class Person {

private String firstName;
private String lastName;    


public Person (String a, String b){

firstName = a;
lastName = b;


}

public String getfirstName(){


    return firstName;
}

public void setfirstName(String firstName){


   this.firstName = firstName;
}

public String getlastName(){


    return lastName;
}

public void setlastName(String lastName){

this.lastName = lastName;
}
}

我的班级创建对象并调用 toString

public class DvdTest {


private DVD d1;

public static void main (String [] args){

Person p2 = new Person ("Leonardo", "Decaprio");

DVD d1 = new DVD ("Inception",p2,4); 

System.out.println (p2.toString());

}
}
4

4 回答 4

3

就像DVD类一样,您也需要覆盖类中的toString()方法Person。目前它正在打印从默认实现返回的值toString(),类似于这样

getClass().getName() + '@' + Integer.toHexString(hashCode())

这是您将使用的示例 IDE 生成的实现。

@Override
public String toString() {
    return "Person [firstName=" + firstName + ", lastName=" + lastName + "]";
}
于 2013-11-08T10:58:31.150 回答
1

当您尝试打印leadActortypePerson时,将调用PersontoString方法。默认方法打印由字符toStirng分隔的类名和哈希。@这就是为什么在你的输出中你会看到这个:

Person@10ed7f5c

为了以漂亮的方式打印 Person 对象,您还需要覆盖类toString中的方法Person。这是使用 eclipse 生成的 toString 实现:

@Override
public String toString() {
    return "Pricing [firstName=" + firstName + ", lastName=" + lastName
            + "]";
}  
于 2013-11-08T10:58:29.477 回答
1

那不是错误的输出。

Object 的默认 toSTring 返回 this。类+哈希码

如果您想要自定义消息覆盖 toString of Person

public String toString() {
    return "Person [firstName=" + firstName + ", lastName=" + lastName + "]";
}

注意:您已经在 DVD 课程中这样做了。

于 2013-11-08T10:59:37.900 回答
1

您必须覆盖该toString()方法:

@Override
public String toString() {
    return String.format("Person [firstName=%s, lastName=%s]", firstName, lastName);
}
于 2013-11-08T11:03:12.243 回答