重载:
前提条件:重载是针对方法来说的,
①在同一个类当中,
②函数名字相同,
③但是参数个数不同或参数类型不同或参数顺序不同
④只有返回值不同是不可以的
重写:
前提条件:重写是针对实例方法来说的
1、要求子父类有相同的“返回值类型 方法名(参数列表)”都相同
2、子类方法的权限修饰符不能小于父类方法的权限修饰符
3、若父类方法抛异常,那么子类方法抛的异常不能大于父类方法抛的异常
4、子父类的方法必须同为static或者同为非static
方法不能交叉覆盖:子类实例方法不能覆盖父类的静态方法;子类的静态方法也不能覆盖父类的实例方法
注意:重写是对子类中可见的父类方法而言的,如果在父类中的方法在子类中不可见,那根本就不存在重写一说
上图中绿色小三角就代表这个方法重写了
覆盖:
覆盖就是重写
隐藏:
隐藏是对于静态方法和成员变量(实例变量和静态变量)而言的,就是父类和子类有相同名字的属性,或者父类和子类有相同名字的静态方法时,
属性是可以交叉隐藏:子类的实例变量可以隐藏父类的静态变量;子类的静态变量可以隐藏父类的实例变量
原理:
覆盖的原理是RTTI,也就是通过Class对象实现的,看的是=后面,运行时类型为引用变量所指向的对象的类型
隐藏就是根据单纯的静态类型实现的,看的是=前面,编译时类型是引用变量自身的类型
原文地址:https://www.cnblogs.com/erdanyang/p/10134652.html
时间: 2024-11-06 04:03:46