关于java中重载,多态,向上和向下转型的概念

之前在学习各种语言的时候,自己总是对一些基础的概念辨析不清,像是面向对象之中的重载和多态,对象的向上和向下转型等等。这里简单记录一下这几个概念的辨析,方便之后的回忆使用。

  1. 重载:重载方法的实现基本上是在类中实现的,在类中有的时候会碰上函数处理一组多情况的输入,或者说,这一组函数针对多情况实现的功能基本就是一致的,那么这个时候,当然是函数名起成相同的最具有一致性了。那么不同的重载函数之间的区别就在参数,参数在个数和类型上都可以有所不同,具体实现的函数语句当然也可以就此有所区别。要注意的是返回值类型也是相同的。举一个例子就是在类中定义的重载构造函数。很明显,可以有诸如无参数构造和有参数构造,但它们解决的就是生成对象这一个问题,无非就是分了分情况。

  2. 多态:这一部分看的比较粗略,主要是看了最常用的方法覆写实现多态。覆写的实现要求方法签名部分,即返回类型,函数名和参数列表都一样,所变的只有方法实现。这里举个例子,像是类的继承过程中,子类可以对从父类所继承的方法进行改写,实现自己想要的功能。
    注意:对于函数名相同,参数相同但是返回值不同的方法也是不同的方法,而且这种情况下会报错,是不允许出现的。

  3. 向上转型:首先是这么一个问题,一个继承了父类的子类生成的对象,类型还是属于父类的吗?答案当然是肯定的。一切的类的父类都是 Object 类,自然一切的对象类型也可以追溯到 Object 上。那么在对象的创建时,对父类的对象构建使用子类的构造函数,这就是将一个子类的对象类型向上转型为更抽象的父类类型。

  4. 向下转型:这里就要针对向上转型来说了,一个父类的对象构建使用子类的构造参数,当前的类型当然是父类类型,但是还可以转型成子类的类型吗?要看情况,上面说的当然可以。而如果一个父类对象的构建不是向上转型来的,那就不能向下转型,因为子类的功能是要比父类多的,没有的功能也变不出来。能否向下转型的判断可以用对象名 instance of 类名(这是 java 14 的功能),来进行判断,结果为 true 可进行强制类型转换来进行向下转型。

注意:java 的实例方法执行是基于运行时的实际类型。