gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:06:21 25 4
gpt4 key购买 nike

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

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是一个子猫,它的类型码是SubCat,那么为什么输出是一个Cat?

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

提前致谢!

最佳答案

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

要获得您期望的行为,您应该删除派生类中的重复字段定义,然后分配给派生构造函数中的原始字段。

关于java - 对象和类子类问题的引用或地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23233839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com