重写,重载和隐藏(屏蔽)

重写(Override)是子类中有方法与父类一样,为了实现多态性,即子类的实例有父类或接口的静态类型时,调用相应的方法会从实例实际类型开始搜索。

重载是在同名的方法中确定选择哪一个方法,在java语言中不考虑返回值类型,只看名字和参数。重载与重写的重要区别是:重写考虑父类子类之间完全一致的方法,与多态的特性相关联。重载考虑一个类中方法名相同但参数不一致的情况,重载选择时就考虑方法接收者的静态类型和参数的静态类型和个数。

方法接收者:比如 People p = new Boy(); p.sayHello(); p就是接收者。p的静态类型为People,实际类型为Boy。
方法的调用者:调用方法的语句所在上下文那个方法

隐藏(屏蔽)是子类中有和父类一样的成员变量名,这个是java语言允许的,但是若要访问父类的同名成员变量就必须使用super关键字。重写的方法也会有这个特性,若子类中重写了某个方法,那么重写的方法因为和父类中的完全一致导致父类的方法也在子类中被隐藏,在子类中若想访问父类的同样方法需要使用super关键字。super.super是java语言不允许的,从语法角度来讲是因为super是关键字不是实例(子类初始化只有一个实例,只是显式或隐式调用了祖类的构造函数),从设计规范角度讲是因为java语言不让访问除父类以外的祖类中的同名变量或方法,违反封装特性。

你可能感兴趣的:(重写,重载和隐藏(屏蔽))