我知道有可能基类变量持有派生类对象。像下面......
class Animal
{
public void printName()
{
System.out.println("Print your name");
}
}
public class Tiger extend Animal
{
public void Print()
{
System.out.println("My Name");
}
public void static main(String args[])
{
Animal type1 = new Tiger();
//with this new created type1 varibale. I can only access members of Animal class.
type1.PrintName() // valid
type1.Print() //In-valid
}
}
那么它的用处是什么?我仍然没有看到任何好处。有人可以解释我,可能是我错过了什么。感谢。
答案 0 :(得分:0)
在这种情况下,变量是从子类变量初始化的地方,它并不是非常有用。有用性有两种情况:
如果您有一个具有基类类型的函数参数,并且您将子类对象作为实际参数传入。
void CareForAnimal(Animal anm) {
anm.Feed();
anm.Sleep();
}
虽然在技术上允许你使用形式参数做事情是不可能的,但是你不能用常规变量做事,作为一个语言设计师,要使它们与众不同并不是很多好处会带来许多复杂因素。
< / LI>当你从一个本身是虚拟的方法的结果初始化基类变量时:
Animal Breed(Animal father, Animal mother) {
Animal child = mother.mater(father);
child.Bathe();
child.Nurse(mother);
return child;
}
现在,您不立即知道正在初始化哪个子类child
。