生活中人物的观点
程序中的多态性概念:父类引用指向子类对象,从而产生多种形态
一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定
例如,dog继承了animal
你怎么理解这个代码的意思?
举个例子:
短s=10;
int num=s;
这两行代码意味着您创建了一个s变量,短类型的占两个字节,然后将名为s的变量传递给num。 num这里是int类型,占用4个字节,两行代码可以正常工作
我们想用这两行代码表达的是,我们从小范围的数据传递到大范围的数据是没错的。
这里的Animal是dog的父类,范围比dog的范围大,所以代码可以执行
父类引用只能调用父类声明的属性和方法,而不能调用子类特定的属性和方法。
如果子类重写了父类的方法,则在调用该方法时,将调用子类的重写方法。 公式在实际执行中也遵循复盖原则。 如果子类复盖了父类的方法,请执行子类的复盖后方法,否则执行子类的方法
多态性的使用场景1 :使用父类作为方法参数实现多态性
上面省略的代码都可以通过调用这样的语句来完成
场景2 :使用父类作为方法的返回值实现多态性,以便方法可以返回不同的子类对象
升级(装箱) Animal a=new Dog );
将实际子类对象保存到父类引用中
将Dog转换为动画
自下而上(开箱)例如,使用父对象创建了子类对象。 父对象只能调用父类的方法和对象以及在子类中重写的方法。 我该怎么办? 我们想调用子类的对象
通过将A强转换为子类对象,可以调用子类的对象和方法
向下转型条件:首先存在向上转型: Animal a=new Dog (; 有后面的变革。 向下的转换必须转换成原来的类型
思考:转换方向时,如何判断现在的类型? 你怎么知道他原来的类型? 从这里出现了Instance of关键词
引用instance of类型//返回布尔类型的结果
总结:父类引用指向子类的对象,以产生各种形式。 将子类作为父类看待
使用父类作为方法的形参,实现多态性(饲养的方法)
使用父类作为方法的返回值以实现多态性(如何购买动物)。
Java多态的三个必要条件:
1、 继承
2、 子类重写父类方法
3、 父类引用指向子类对象