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

时间:2015-01-30 23:57:22

标签: java variables reference

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"他们两者都有变化,因为参考变量都指向同一个内存我猜。现在我做了另一个参考变量" obj3"属于动物类型的超级类。我把它作为参考obj2,现在当我尝试更改实例变量" name"使用obj3它不起作用。谁能告诉我为什么会这样?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

“我期待”这是Alpha“作为输出,但它打印”这是野马“”。

好吧,你有两个名为name的“桶”。根据类型,您将访问其中一个。由于obj3引用认为它是Animal,因此它从超类name访问(并打印)Animal。这就是为什么obj3打印“这是野马”的原因是因为它正在访问name类中声明的Animal