java中重载,覆盖和隐藏的区别
发布网友
发布时间:2022-04-22 11:28
我来回答
共1个回答
热心网友
时间:2023-07-02 07:41
在JAVA中所谓隐藏,是指运行时系统调用当前对象引用的编译时类型中定义的方法;也就是子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同
所谓覆盖,则指运行时系统调用当前对象引用运行时类型中定义的方法。也就是父类和子类拥有相同名字的属性或者方法时,父类的同名的属性或者方法形式上不见了,实际是还是存在的
两者的区别主要在于:
被隐藏的属性,在子类被强制转换成父类后,访问的是父类中的属性
被覆盖的方法,在子类被强制转换成父类后,调用的还是子类自身的方法
在使用隐藏和覆盖的时候主要注意以下几点:
一、父类的实例变量和类变量能被子类的同名变量隐藏。
二、父类的静态方法被子类的同名静态方法隐藏,父类的实例方法被子类的同名实例方法覆盖。
三、不能用子类的静态方法隐藏父类的实例方法,也不能用子类的实例方法覆盖父类的静态方法,否则编译器会异常。
四、用final关键字修饰的最终方法不能被覆盖。
五、变量只能被隐藏不会被覆盖,子类的实例变量可以隐藏父类的类变量,子类的类变量也可以隐藏父类的实例变量。