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它不起作用。谁能告诉我为什么会这样?
答案 0 :(得分:1)
您正在超类型和子类型中定义成员字符串名称。您应该从Horse类中删除名称成员。
答案 1 :(得分:0)
“我期待”这是Alpha“作为输出,但它打印”这是野马“”。
好吧,你有两个名为name
的“桶”。根据类型,您将访问其中一个。由于obj3
引用认为它是Animal
,因此它从超类name
访问(并打印)Animal
。这就是为什么obj3
打印“这是野马”的原因是因为它正在访问name
类中声明的Animal
。