为什么我们使用 Parent Class 引用来覆盖 Java?

Why do we use Parent Class reference for overriding in Java?

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 class 参考是最重要的。

有人告诉我一个场景,我们希望将所有对象存储在一个列表中 并使用 Parent class 参考可以让我们实现这一目标。

如果您想使用泛型存储项目,或者如果您想定义一个可以是任何子项的类型 class,具体取决于代码。如果你想检查所有对象都是给定父对象的实例 class 等

例如如果你只是想要一个人的列表,谁可以是任何 class 扩展的人,你可以有

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

然后在你的代码中说你想要一个父亲和两个儿子,他们每个人都继承了 Person 你可以将它们添加到列表中

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

例如,您可以遍历打印详细信息的列表。

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