为什么我们使用父类引用来覆盖Java?

时间:2016-04-15 17:17:33

标签: java inheritance polymorphism override

class Father {
    void name() {
        System.out.println("This is father");
    }

    void details() {
        System.out.println("He is the head of the family");
    }

    void traits() {
        System.out.println("He loves everyone");
    }
}

class Son extends Father {
    @Override
    void name() {
        System.out.println("This is the son");
    }

    @Override
    void details() {
        System.out.println("He is the youngest one in the family");
    }
}


public class overridingDoubt {
    public static void main(String... args) {

        System.out.println("Father type ref");
        System.out.println("******************");
        Father obj = new Son();//This raises my doubt
        obj.name();
        obj.details();
        obj.traits();

        System.out.println("\n \n Son type ref");
        System.out.println("******************");
        Son obj1 = new Son();
        obj1.name();
        obj.details();
        obj.traits();       
    }
}

这两个参考文献也实现了相同的结果。 我只是想知道一个真实的场景,使用Parent类引用是至关​​重要的。

我被告知一种情况,我们希望将所有对象存储在List中 并且使用Parent类引用可以让我们实现它。

1 个答案:

答案 0 :(得分:2)

如果要使用泛型存储项目,或者要定义可能是任何子类的类型,具体取决于代码。如果要检查所有对象是否是给定父类的实例等。

E.g。如果您只是想要一个人员列表,那么谁可以是任何可以扩展人员的类

List<Person> list = new ArrayList<Person>(); 

然后在你的代码中说你想要一个父亲和两个儿子,每个人都扩展了人,你可以将这些添加到列表中

list.add(new Father()); //Etc. 

然后你可以例如遍历列表打印细节。

for(Person p: list){
    p.details();
}