基类变量持有派生类对象的好处是什么?

时间:2015-10-01 21:05:56

标签: oop inheritance

我知道有可能基类变量持有派生类对象。像下面......

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
    }
}

那么它的用处是什么?我仍然没有看到任何好处。有人可以解释我,可能是我错过了什么。感谢。

1 个答案:

答案 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