在父子关系中,您可以获取父级的引用,并可以像您所做的那样创建子级的对象。
Superclass a;
a = new ChildClass();
但是有一个条件是对象a
遵循其引用类的蓝图,这意味着在您的情况下a
具有超类的引用,因此a
可以访问在超类中定义的所有方法而不是在 ChildClass 中。
所以你的调用a.setname("Roger");
是无效的,因为a
它的类型超类没有setname(String) method but if you do something like
ChildClass a = new ChildClass() then your call to
a.setname("Roger"); will be valid because
一个is of type ChildClass which has
setname(String) 方法。
还有一件事,假设您的结构为:
class SuperClass
{
public SuperClass();
public void setName(String name)
{
System.out.println("setName() of SuperClass with name "+name);
}
}
class ChildClass extends SuperClass
{
public ChildClass();
public void setName(String name)
{
System.out.println("setName() of ChildClass with name "+name);
}
}
你在 main 中调用它:
ChildClass a;
a = new ChildClass();
a.setname("Roger");
所以它会编译并运行良好并输出
名称为 Roger 的 ChildClass 的 setName()。
我相信你现在知道这个输出的真正原因了。:)