预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

JAVA面试题解惑系列(三)——变量(属性)的覆盖 我们来看看这么一道题: Java代码 classParentClass{ publicinti=10; } publicclassSubClassextendsParentClass{ publicinti=30; publicstaticvoidmain(String[]args){ ParentClassparentClass=newSubClass(); SubClasssubClass=newSubClass(); System.out.println(parentClass.i+subClass.i); } } classParentClass{ publicinti=10; } publicclassSubClassextendsParentClass{ publicinti=30; publicstaticvoidmain(String[]args){ ParentClassparentClass=newSubClass(); SubClasssubClass=newSubClass(); System.out.println(parentClass.i+subClass.i); } } 控制台的输出结果是多少呢?20?40?还是60?变量,或者叫做类的属性,在继承的情况下,如果父类和子类存在同名的变量会出现什么情况呢?这就是这道题要考查的知识点——变量(属性)的覆盖。这个问题虽然简单,但是情况却比较复杂。因为我们不仅要考虑变量、静态变量和常量三种情况,还要考虑private、friendly(即不加访问修饰符)、protected和public四种访问权限下对属性的不同影响。我们先从普通变量说起。依照我们的惯例,先来看一段代码: Java代码 classParentClass{ privateStringprivateField="父类变量--private"; /*friendly*/StringfriendlyField="父类变量--friendly"; protectedStringprotectedField="父类变量--protected"; publicStringpublicField="父类变量--public"; //private的变量无法直接访问,因此我们给他增加了一个访问方法 publicStringgetPrivateFieldValue(){ returnprivateField; } } publicclassSubClassextendsParentClass{ privateStringprivateField="子类变量--private"; /*friendly*/StringfriendlyField="子类变量--friendly"; protectedStringprotectedField="子类变量--protected"; publicStringpublicField="子类变量--public"; //private的变量无法直接访问,因此我们给他增加了一个访问方法 publicStringgetPrivateFieldValue(){ returnprivateField; } publicstaticvoidmain(String[]args){ //为了便于查阅,我们统一按照private、friendly、protected、public的顺序 //输出下列三种情况中变量的值 //ParentClass类型,ParentClass对象 ParentClassparentClass=newParentClass(); System.out.println("ParentClassparentClass=newParentClass();"); System.out.println(parentClass.getPrivateFieldValue()); System.out.println(parentClass.friendlyField); System.out.println(parentClass.protectedField); System.out.println(parentClass.publicField); System.out.println(); //ParentClass类型,SubClass对象 ParentClasssubClass=newSubClass(); System.out.println("ParentClasssubClass=newSubClass();"); System.out.println(