ublic class StudentTest {
public static void main(String[] args) {
Student student=new Student();
student.show();
System.out.println(student.getA().equals("Tom"));
System.out.println(student.getA().getName().equals("Tom"));
}
}
public class Student {
private Att a=Att.N;
public Att getA() {
return a;
}
public void setStatus(Att status) {
this.a = status;
}
public void show() {
System.out.println(a);
System.out.println(getA());
}
}
public class Att{
private String name;
public Att(String name) {
super();
this.name = name;
}
public static final Att N=new Att("Tom");
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
student.getA()和student.getA().getName()不应该都是String类型吗?
首先你的getA
public Att getA() {
return a;
}
返回的是Att对象,肯定是类型的,如果你要获取字符串,需要自己去调用toString()方法
至于在show()中为什么会直接输出你重写的toString
public void show() {
System.out.println(a);
System.out.println(getA());
}
这是因为在System.out.println中对于引用类型对象内部会调用toString方法
你看Sutdent类中getA方法签名,它是返回Att类型啊,怎么能是String类型呢?
getName()是String没毛病。实际上getA().getName相当于
Att a = student.getA();
String str = a.getName();
如果getA()返回的是String的话,你就点不出getName()了
你重写过toString,跟你getA和getName返回什么有一毛钱关系吗
你根本没有调用toString函数啊
private Att a=Att.N;
这是你的getA,返回的Att 这个对象
public Att getA() {
return a;
}
这是你的getName返回的是String
public String getName() {
return name;
你在外部直接打印System.out.println(Att);对象时他会默认调用toString。
但是你使用的是getA()方法,返回的是一个对象。是object类型。
如有帮助望采纳