JAVA的重载与重写&隐藏与覆盖

Posted erdanyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA的重载与重写&隐藏与覆盖相关的知识,希望对你有一定的参考价值。

重载:

前提条件:重载是针对方法来说的,

①在同一个类当中,
②函数名字相同,
③但是参数个数不同或参数类型不同或参数顺序不同
④只有返回值不同是不可以的

重写:

前提条件:重写是针对实例方法来说的

1、要求子父类有相同的“返回值类型 方法名(参数列表)”都相同
2、子类方法的权限修饰符不能小于父类方法的权限修饰符
3、若父类方法抛异常,那么子类方法抛的异常不能大于父类方法抛的异常
4、子父类的方法必须同为static或者同为非static

方法不能交叉覆盖:子类实例方法不能覆盖父类的静态方法;子类的静态方法也不能覆盖父类的实例方法

注意:重写是对子类中可见的父类方法而言的,如果在父类中的方法在子类中不可见,那根本就不存在重写一说

 技术分享图片

上图中绿色小三角就代表这个方法重写了

覆盖:

 覆盖就是重写

隐藏:

隐藏是对于静态方法和成员变量(实例变量和静态变量)而言的,就是父类和子类有相同名字的属性,或者父类和子类有相同名字的静态方法时,

属性是可以交叉隐藏:子类的实例变量可以隐藏父类的静态变量;子类的静态变量可以隐藏父类的实例变量

原理:

覆盖的原理是RTTI,也就是通过Class对象实现的,看的是=后面,运行时类型为引用变量所指向的对象的类型

隐藏就是根据单纯的静态类型实现的,看的是=前面,编译时类型是引用变量自身的类型







以上是关于JAVA的重载与重写&隐藏与覆盖的主要内容,如果未能解决你的问题,请参考以下文章

类中的同名函数关系,重载,覆盖/重写,隐藏

函数的重载重写与隐藏

C++中重载重写(覆盖)和隐藏的区别

函数重载和覆盖(重写)的区别

方法重写与方法重载的区别

方法重写与方法重载的区别