黑马程序员1——关于Java的继承过程中成员变量与方法的隐藏与覆盖
2013-08-30 16:29
501 查看
------- android培训、java培训、期待与您交流! ----------
最近几天在狂补Java的基础,在看到多态状态下继承时,出现纠结,于是把相关的思绪全部整理了一下,并编译验证。
先简述思想:
1、在继承过程中,父类成员变量一律只能被子类重写隐藏而不能重写覆盖。
2、在继承过程中,父类的静态方法一律只能被子类重写隐藏,实例方法一律被重写覆盖。
3、覆盖的方法没有加载进内存区。(这个是猜测,有待牛人考证)
4、静态方法与非静态方法之间不能重写,子类对象调用时会出现二义性。
通过运行,我发现结果是20,这说明父类的setnum方法被重写覆盖了,没有加载进内存区。
该代码运行结果为10,说明静态的方法是被隐藏而不是覆盖,把子类对象向上转型时,a变量无法访问子类的特有方法,但是num被改变,说明父类setnum方法没有被覆盖只是隐藏而已。
在加与不加static的情况下,将a对象调用setnum方法去掉后,运行结果都为3,说明成员变量在继承中只会被重写隐藏而不会覆盖。
最近几天在狂补Java的基础,在看到多态状态下继承时,出现纠结,于是把相关的思绪全部整理了一下,并编译验证。
先简述思想:
1、在继承过程中,父类成员变量一律只能被子类重写隐藏而不能重写覆盖。
2、在继承过程中,父类的静态方法一律只能被子类重写隐藏,实例方法一律被重写覆盖。
3、覆盖的方法没有加载进内存区。(这个是猜测,有待牛人考证)
4、静态方法与非静态方法之间不能重写,子类对象调用时会出现二义性。
class Fu{ int num =3; void setnum(){ num = 10; } } class Zi extends Fu{ int num = 5; void setnum(){ num = 20; } } public class Test{ public static void main(String[] args){ Zi a = new Zi(); a.setnum(); System.out.println(a.num); } }
通过运行,我发现结果是20,这说明父类的setnum方法被重写覆盖了,没有加载进内存区。
class Fu{ static int num =3; static void setnum(){ num = 10; } } class Zi extends Fu{ static int num = 5; static void setnum(){ num = 20; } } public class Test{ public static void main(String[] args){ Fu a = new Zi(); a.setnum(); System.out.println(a.num); } }
该代码运行结果为10,说明静态的方法是被隐藏而不是覆盖,把子类对象向上转型时,a变量无法访问子类的特有方法,但是num被改变,说明父类setnum方法没有被覆盖只是隐藏而已。
在加与不加static的情况下,将a对象调用setnum方法去掉后,运行结果都为3,说明成员变量在继承中只会被重写隐藏而不会覆盖。
相关文章推荐
- JAVA中方法和变量在继承中的覆盖和隐藏
- Java子类继承(二):隐藏成员变量和方法重写的理解
- JAVA中方法和变量在继承中的覆盖和隐藏
- 关于JAVA继承类的静态变量、成员变量、父子类构造方法调用顺序的探讨
- Java类成员(成员变量和方法)的覆盖与隐藏归纳
- JAVA中方法和变量在继承中的覆盖和隐藏
- JAVA中方法和变量在继承中的覆盖和隐藏
- Java类成员(成员变量和方法)的覆盖与隐藏归纳
- JAVA中方法和变量在继承中的覆盖和隐藏
- JAVA中方法和变量在继承中的覆盖和隐藏
- JAVA中方法和变量在继承中的覆盖和隐藏
- [Java] 继承中,父类被覆盖的成员变量、方法的可访问性
- 面试题2——JAVA中方法和变量在继承中的覆盖和隐藏
- JAVA中方法和变量在继承中的覆盖和隐藏
- java 子类继承父类成员变量的隐藏、实现方法的重写
- 关于JAVA继承类的静态变量、成员变量、父子类构造方法调用顺序的探讨 .
- JAVA中方法和变量在继承中的覆盖和隐藏
- 关于JAVA继承类的静态变量、成员变量、父子类构造方法调用顺序的研究
- java中方法和变量在继承时的覆盖与引用
- Java基础 成员变量的继承与覆盖