java-引用变量和超class引用变量

java- reference variable and super class reference variable

public class HelloWorld
{      

     public static void main(String []args)
     {
       Horse obj1=new Horse();
       Horse obj2=obj1;
       Animal obj3;
       obj3=obj2;
       obj2.name="Mustang";
       obj3.name="Alpha";
       obj3.display();
     }
}


class Animal
{   

    String name;
    void display()
    {
        System.out.println("this is "+name);
    }
}

class Horse extends Animal
{

    String name;
    void display()
    {
        System.out.println("this is  "+name);
    }
 }

你好,我是 java 的初学者,如果这个问题很愚蠢,我很抱歉。这是一个简单的程序,其中一个引用变量 obj2 引用另一个相同类型的引用变量 obj1。如果我更改实例变量 "name" 它们都会发生变化,因为两个引用变量都指向我猜的同一内存。现在我制作了另一个 Animal 类型的参考变量 "obj3",它是超级 class。我使它引用 obj2,现在当我尝试使用 obj3 更改实例变量 "name" 时,它不起作用。谁能告诉我为什么会这样?

您正在定义超类型和子类型中的成员字符串名称。您应该从 Horse class.

中删除名称成员

"I was expecting "这是 Alpha" 作为输出,但它打印 "this is mustang""。

好吧,你有两个 "buckets" 名为 name。根据类型,您将访问一个或另一个。由于 obj3 引用认为它是一个 Animal,它从超级 class、Animal 访问(并打印)name。所以这就是为什么 obj3 打印 "this is mustang" 是因为它正在访问 Animal class.

中声明的 name