java多态中怎么理解父类可以自动接收子类实例化对象

刚刚看视频里面提到的一句话“父类可以自动接收子类实例化对象”,这句话怎么理解求大神解释

class A {
    public void fun() {
        System.out.println("A public void fun()");
    }
}

class B extends A {
    public void fun() { // 核心方法
        System.out.println("B public void fun()");
    }

    // 是子类扩充的方法
    public void printB() { // 非核心方法
        System.out.println("B public void printB()");
    }
}

class C extends A {
    public void fun() {
        System.out.println("C public void fun()");
    }
}

public class TestDemo {
    public static void main(String args[]) {
        get(new B());
        get(new C());
    }
    public static void get(A a){
        a.fun();
    }
}

”父类可以自动接收子类实例化对象“这句话就是指父类可以接受子类对象。理解层面:猫、狗都属于动物,Animal a = new Dog();
你贴出来的代码,B中的fun方法是对父类A中的fun方法进行的覆盖重写,printB()方法是B类中特有的方法。你的TestDemo中get(new B())和get(new C());
打印的结果是:
B public void fun()
C public void fun()
为了更好的理解,可以将TestDemo中的代码修改一下:
A a1 = new B(); // a1 父类自动接收了子类的实例化对象。
a1.fun();
A a2 = new C(); //a2 父类自动接受了子类的实例化对象。
a2.fun();
打印的结果与上面一致。
a1.printB();
打印结果是:B public void printB()

很简单啊,比如说一个方法,它的参数是需要一个 输出流 OutputStream ,那么输出流的任何子类都可以当做参数传递进去。

因为你不管是使用继承还是实现 都会拥有父类定义好的公有方法及其他特性。方法内部是不需要管你到底是个什么输出流。
只要是输出流就都会拥有OutputStream 的方法或特性,而方法内部也只能调用OutputStream的方法或特性。
所以这里就体现出了面向接口编程的优势,只要定义好接口,可以动态传递进去不同的子类,不同的实现去应对不同的需求

这个就是继承的使用,假设动物分为A肉食动物,B食草动物,但这些动物又拥有C所有动物的共同特征,A就继承了C,B也继承了C,但是A和B又个子拥有各自的特性

就是父类可以调用子类的对象来创建子类的实例。B是A的子类,如果要产生B的对象,可以
B x =new B;
也可以A x = new B;
不同的行为,相同的实现 ,可以去看看工厂模式,这个东西就用得很多

http://www.cnblogs.com/chenssy/p/3372798.html