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

重载:

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

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

重写:

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

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

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

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

 

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

覆盖:

 覆盖就是重写

隐藏:

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

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

原理:

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

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

猜你喜欢

转载自www.cnblogs.com/erdanyang/p/10134652.html