多态与上下转型,不是为转型而转型,是为访问不同类(父或子)中的方法而转型

版权声明:之江学院 黄日超 https://blog.csdn.net/weixin_41474319/article/details/82182329

两句话讲清多态:

1.多态与上下转型,不是为转型而转型,是为访问不同类(父或子)中的方法而转型

2.多态,通过父类发出指令,得到不同子类的响应

举例

public class Children extends Parent{
    @override //看到override就知道父类中也有个run方法,具体细节大家脑补下.
    public void run(){
       System.out.println(“This is a Children class”);
    }
}

public class ParentParseChildren{
    Parent p = new Children(); 向父转型
    p.run()//通过p可用父类方法或父类被子类覆盖的方法
           //但我们还不满足,想调用子类独特的方法;
    Children c = (Children)p; //向子转型,里氏替换法则了解一下,信息量较小的父对象是可以被转成消息量较大的子对象的
                              //多出来的部分用默认值,但是反过来转是违法的,就像int型可转成float,float型却不能转成int.
    c.play();// 通过c对象访问子类public的方法

总结:

    多态,通过父类发出指令,得到不同子类的响应,很明显,Parent p = new Children();  p.run(); 

    父类对象p要调用run方法时,得到的是Children子类的响应.里氏替换法,子可以替换父,父不可以替换子(信息只能多,不能少,要么封装,要么别替换).

     Parent p = new Parent();Children c = new Children();p = (Parent)c;子封装后替换父,即p只能访问自身或子类里重写的方法.

猜你喜欢

转载自blog.csdn.net/weixin_41474319/article/details/82182329