2015-10-01 2 views
2

Я знаю, что можно использовать класс переменной, удерживающий производный объект класса. Как ниже ....В чем преимущество базового класса, удерживающего производный объект класса?

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

В этом случае, где переменная инициализирована из переменной дочернего класса, это не очень полезно. Полезность в двух случаях:

  • Если у вас есть параметр функция с типом базового класса и вы проходите в классе ребенка объект в качестве фактического аргумента.

    void CareForAnimal(Animal anm) { 
        anm.Feed(); 
        anm.Sleep(); 
    } 
    

    Хотя это технически возможно, чтобы позволить вам делать вещи с формальными параметрами, которые вы не можете сделать с обычными переменными, как язык дизайнера это много осложнений, чтобы сделать их разными для не много пользы.

  • Когда у вас есть переменная базового класса инициализирована из результата метода, который сам по себе виртуальный:

    Animal Breed(Animal father, Animal mother) { 
        Animal child = mother.mater(father); 
    
        child.Bathe(); 
        child.Nurse(mother); 
    
        return child; 
    } 
    

Теперь вы не знать сразу, какой класс ребенок child является инициализируется.

Смежные вопросы