• 《java入门第一季》之面向对象(一个易错面试题)


    这个面试题有点难度,有一些饶。不明白可以在下面讨论。还是值得搞懂的。
    
    /
    *
    	看程序写结果:
    		A:成员变量的问题
    			int x = 10; //成员变量x是基本类型
    			Student s = new Student(); //成员变量s是引用类型
    		B:一个类的初始化过程
    			成员变量的初始化
    				默认初始化。
    				显示初始化。
    				构造方法初始化
    		C:子父类的初始化(分层初始化)
    			先进行父类初始化,然后进行子类初始化。
    			
    	结果:
    		YXYZ
    		
    	问题:
    		虽然子类中构造方法默认有一个super()
    		(初始化)的时候,(不是)按照那个顺序进行的。
    		(而是)按照(分层)初始化进行的。
    		(它仅仅表示)要先初始化父类数据,再初始化子类数据。
    */
    class X {
    	Y b = new Y();//这是成员变量初始化
    	X() {
    		System.out.print("X");
    	}
    }
    
    class Y {
    	Y() {
    		System.out.print("Y");
    	}
    }
    
    public class Z extends X {
    	Y y = new Y();//Y
    	Z() {
    		//super()隐含一个super(),不代表执行,仅仅表示要(先初始化)父类数据,隐含调用了父类中的无参构造方法,最后再初始化子类数据
    		
    		System.out.print("Z");//Z
    	}
    	public static void main(String[] args) {
    		new Z(); //先去初始化父类x,再去访问子类z
    	}
    }
    易错答案:YYXZ.因为没考虑到super其实仅仅时代表了初始化父类数据
  • 相关阅读:
    JavaScript入门二
    JavaScript入门
    CSS样式之补充
    CSS样式之操作属性二
    隔空手势操作
    项目管理培训(2)
    uoot启动过程
    new work
    库函数开发步骤 (转)
    keil(持续更新)
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299862.html
Copyright © 2020-2023  润新知