您的位置:首页 > 编程语言 > Java开发

JAVA中方法和变量在继承中的覆盖和隐藏

2016-10-03 18:37 176 查看
我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊,但是在面试或者是SCJP认证题中围绕这些是会经常碰到的,所以这里来讨论下

首先我们来看几个概念:

类变量:又叫静态变量,这种变量属于类,通过类名就可以访问类变量。

实例变量:属于类的实例,即对象,通过对象可以访问实例变量,但是不能通过类名访问实例变量。

静态方法:通过类名访问。

实例方法:对象访问,不能通过类名访问。

隐藏 :child隐藏了parent的变量和方法,那么,child不能访问parent被隐藏的变量或者方法,但是,将B转换成A中,可以访问A被隐藏的变量或者方法

覆盖 :child覆盖了parent的变量或者方法,那么,child不能访问parent被覆盖的变量或者方法,将child转换成parent(引用)后同样不能访问parent被覆盖的变量或者方法

只有成员变量(不管是不是静态)和静态方法可以被隐藏。

隐藏 和覆盖 的区别在于,子类对象转换成父类对象后,能够访问父类被隐藏 的变量和方法,而不能访问父类被覆盖 的方法

首先看一下JAVA中方法和变量在继承时的覆盖和隐藏规则

1.父类的实例变量和静态变量能被子类的同名变量隐藏

2.父类的静态方法被子类的同名静态方法隐藏

3.父类的实例方法被子类的同名实例变量覆盖

还有几点需要注意的是:

1、不能用子类的静态方法隐藏 父类中同样标示(也就是返回值 名字 参数都一样)的实例方法

2、不能用子类的实例方法覆盖 父类中同样标示的静态方法

3、不能隐藏超类中的private成员变量,换句话说,只能隐藏可以访问的成员变量。

4、变量只会被隐藏 不会被覆盖 ,无论他是实例变量还是静态变量,而且,子类的静态变量可以隐藏 父类的实例变量,子类的实例变量可以隐藏 父类的静态变量

5、最终方法(带关键字final的方法)不能被覆盖。

6、可以隐藏超类中的final成员变量。

7、隐藏成员变量时,只要同名即可,可以更改变量类型(无论基本类型还是隐藏类型)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 继承 对象 面试