Java继承中的几道面试题


第一题:

 1 /*
 2  看程序写结果:  3  A:访问成员变量的原则:就近原则。  4  B:this和super的问题:  5  this 访问本类的成员  6  super 访问父类的成员(可以理解为的)  7  C:子类的所有构造方法执行前默认先执行父类的无参构造方法。  8  D:一个类的初始化过程:  9  成员变量进行初始化过程如下: 10  默认初始化 11  显示初始化 12  构造方法初始化 13                 
14  输出的结果是: 15      fu 16      zi 17      30 18      20 19      10 20 */
21 class Fu { 22     public int num = 10; 23     public Fu() { 24         System.out.println("fu"); 25  } 26 } 27 
28 class Zi extends Fu { 29     public int num = 20; 30     public Zi() { 31         System.out.println("zi"); 32  } 33     public void show() { 34         int num = 30; 35         System.out.println(num); //30
36         System.out.println(this.num); //20
37         System.out.println(super.num); //10
38  } 39 } 40 class ExtendsTest { 41     public static void main(String[] args) { 42         Zi z = new Zi(); 43  z.show(); 44  } 45 }

第二题:

 1 /*
 2  看程序写结果:  3  A:一个类的静态代码块,构造代码块,构造方法的执行流程:  4  静态代码块 > 构造代码块 > 构造方法  5  B:静态的内容是随着类的加载而加载,  6  即:静态代码块的内容会优先执行。  7  C:构造代码块  8   在类中方法外出现(即在类中的成员位置),可以把多个构造方法方法中相同的代码存放到一起,用于对对象进行初始化,  9  每次调用构造方法都执行,并且在构造方法前执行。 10  C:子类的所有的构造方法默认都会去访问父类的无参构造方法。 11         
12  输出结果是: 13    静态代码块Fu 14    静态代码块Zi 15    构造代码块Fu 16    构造方法Fu 17    构造代码块Zi 18     构造方法Zi 19 */
20 class Fu { 21     static { 22         System.out.println("静态代码块Fu"); 23  } 24 
25  { 26         System.out.println("构造代码块Fu"); 27  } 28 
29     public Fu() { 30         System.out.println("构造方法Fu"); 31  } 32 } 33 
34 class Zi extends Fu { 35     static { 36         System.out.println("静态代码块Zi"); 37  } 38 
39  { 40         System.out.println("构造代码块Zi"); 41  } 42 
43     public Zi() { 44         System.out.println("构造方法Zi"); 45  } 46 } 47 
48 class ExtendsTest2 { 49     public static void main(String[] args) { 50         Zi z = new Zi(); 51  } 52 }

第三题:

 1 /*
 2  看程序写结果:  3  A:成员变量的问题  4  int x = 10; //成员变量x是基本类型  5  Student s = new Student(); //成员变量s是引用类型  6  B:一个类的初始化过程  7  先进行成员变量的初始化:  8  默认初始化  9  显示初始化 10  构造方法初始化 11  C:子父类的初始化(分层初始化) 12  先进行父类初始化,然后进行子类初始化。 13             
14  结果: 15  YXYZ 16         
17  问题: 18  虽然子类中的构造方法默认有一个 super(); 19  但初始化的时候,不是按照那个顺序进行的。 20  而是按照分层初始化进行的。 21  super(); 它仅仅表示要先初始化父类数据,再初始化子类数据。 22 */
23 
24 class X { 25     //成员变量(引用类型)
26     Y b = new Y(); 27     //无参构造方法
28  X() { 29         System.out.print("X"); 30  } 31 } 32 
33 class Y { 34     //无参构造方法
35  Y() { 36         System.out.print("Y"); 37  } 38 } 39 
40 public class Z extends X { 41     //成员变量(引用类型)
42     Y y = new Y(); 43     //无参构造方法
44  Z() { 45         //super(); //它仅仅表示要先初始化父类数据,再初始化子类数据。
46         System.out.print("Z"); 47  } 48     public static void main(String[] args) { 49         new Z(); 50  } 51 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM