Java 对象和类子类问题的引用或地址

Java 对象和类子类问题的引用或地址,java,object,reference,subclass,Java,Object,Reference,Subclass,我对以下代码的输出感到非常困惑: public class Cat { public String typeCode = "Cat"; public String toString(){ return "Cat"; } public static void printTypes(Cat c1, Cat c2){ System.out.println(c1.typeCode + " " + c2.typeCode); }

我对以下代码的输出感到非常困惑:

public class Cat {

    public String typeCode = "Cat";
    public String toString(){
        return "Cat";
    }

    public static void printTypes(Cat c1, Cat c2){
        System.out.println(c1.typeCode + " " + c2.typeCode);
    }

    public static void main(String[] args){
        Cat c1 = new Cat();
        SubCat s1 = new SubCat();
        Cat c2 = s1;

        System.out.println(s1.typeCode);
        Cat.printTypes(c1, s1);
        SubCat.printTypes(c1, s1);
        SubCat.printTypes(c2, c1);
        SubCat.printTypes(c1, c2);
        System.out.println(c2 + " " + c1);

    }
}

public class SubCat extends Cat{
    public String typeCode = "SubCat";
    public String toString(){
        return "SubCat";
    }

    public static void printTypes(Cat c1, Cat c2){
        System.out.println(c1 + " " +c2.typeCode);
    }

}
Eclipse为我提供了以下输出:

SubCat
Cat Cat
Cat Cat
SubCat Cat
Cat Cat
SubCat Cat
但在我看来,我认为第二行和第三行应该是

Cat SubCat
Cat SubCat
既然s1是子类别,其类型代码是子类别,那么为什么输出是Cat

还有,在这一行之后会发生什么: c2类=s1类? 这是否意味着s1和c2将是完全相同的对象,或者s1和c2在RAM中只是具有相同的引用或地址?c2是Cat还是SubCat,s1是否会更改为SubCat

提前谢谢

您有两个不同的
typeCode
字段;每班一人。
在派生类中创建具有相同名称的字段不会影响基类中定义的字段

要获得预期的行为,应删除派生类中的重复字段定义,而不是在派生构造函数中分配给原始字段。

请通过添加标记来指示语言(java),而不是将其放在标题中。这次我把它修好了。