我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊,但是在面试或者是SCJP认证题中围绕这些是会经常碰到的,所以这里来讨论下
首先我们来看几个概念
类变量:又叫静态变量,这种变量属于类,通过类名就可以访问类变量。
实例变量:属于类的实例,即对象,通过对象可以访问实例变量,但是不能通过类名访问实例变量。
静态方法:通过类名访问。
实例方法:对象访问,不能通过类名访问。
隐藏 :child隐藏了parent的变量和方法,那么,child不能访问parent被隐藏的变量或者方法,但是,将B转换成A中,可以访问A被隐藏的变量或者方法
覆盖 :child覆盖了parent的变量或者方法,那么,child不能访问parent被覆盖的变量或者方法,将child转换成parent后同样不能访问parent被覆盖的变量或者方法
首先看一下JAVA中方法和变量在继承时的覆盖和隐藏规则
1.父类的实例变量和静态变量能被子类的同名变量隐藏
2.父类的静态方法被子类的同名静态方法隐藏
3.父类的实例方法被子类的同名实例变量覆盖
作为通用的规则:覆盖实例方法时,新方法的访问控制不能比原来的方法更严格,但可以更松。
1.在超类中被声明为公有的实例方法,在子类中也必须是公有的;