查漏补缺2(面试小题目)

来源:互联网 发布:淘宝店铺图标是什么 编辑:程序博客网 时间:2024/06/06 01:22
//面试public class Main{class demo{}public static void main(String[] args){new demo();//报错,因为主函数是静态的所以class demo要加static//static不能使用this}public  void show(){new demo();//前面实际上省略this}}


1.面试 多态和匿名内部类的结合


提问为什么下述代码编译失败?(据说挂了很多人)

class in{void set(){ Object obj = new Object()//匿名内部类的子类对象,并向上转型为Object { public void show() { System.out.print("sdf"); } }; obj.show();//向上转型,限制了子类对象的特有方法,所以编译失败}}public class Main{public static void main(String[] args){new in().set();}}

2.下述代码打印什么?

class Fu{public Fu() {show();}void show(){System.out.println("呵呵");}}class Zi extends Fu{int num = 9;Zi(){System.out.println("子构造器..."+num);}void show(){System.out.println("shiow..."+num);}}public class Main{public static void main(String[] args){new Zi();}}

show。。。0
子构造器。。。9

为什么?

Zi()

实际上省略了,super();调用super,执行Fu构造器里的show,而子类中有show方法,所以覆盖执行子类的show,子类的num默认初始化是0,所以先打印show。。。0,然后num 可视初始化9,然后打印  子构造器。。。9



3.下面打印什么?

class Zi {int num = 9;{System.out.println("shiow..."+num);}Zi(){System.out.println("shiow2..."+num);}}public class Main{public static void main(String[] args){new Zi();}}



shiow...9
show2...9


4.下面打印什么?

class Fu{Fu() {System.out.println("fu++++++++");//3show();}void show(){System.out.print("hehe");}}class Zi extends Fu{int num = 9;{System.out.println("shiow..."+num);num = 10;}Zi(){super();//2//可视初始化 5//构造代码块初始化 6System.out.println("shiow2..."+num);//7}void show()//4{System.out.println("zi show..."+num);}}public class Main{public static void main(String[] args){new Zi();//1:num = 0}}

fu++++++++
zi show...0
shiow...9
shiow2...10

结合以上3、4两例:

new Zi()的时,num是默认初始化0,现在执行Zi类的构造函数,然后super执行父类的构造函数,然后执行子类覆盖的show,这时num还是0,然后num显示初始化为9,然后执行代码块初始化,然后Zi()构造函数的show


代码注释的标号为执行顺序


0 0
原创粉丝点击