我已经重写过toString了,为什么直接get的时候获取到的是引用数据类型,输出测试过了输出的是重写过的toString,但是还是需要调用到具体类的get方法才能获取的是String类型的。

public class StudentTest {
public static void main(String[] args) {
Student student=new Student();
student.show();//先调用studen里面的方法,证明重写已经成功了
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类型吗?

student.getA()这个方法返回值是Att对象,跟有没有重写toString没关系
student.getA().getName()这个返回是String,因为方法返回类型就是String

使用方法,返回值是什么,你获得的就是什么
就像你买个快递,箱子上写着水果,那你从里面拿出的就应该是水果(本类谱系对象),而不应该是鸡肉(非本类谱系对象),更不能拿出一个苹果核(处理后的对象),除了拿出水果的情况,其它情况你都会打电话投诉的