您的位置:首页 > 职场人生

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

2014-09-25 01:37 441 查看
//面试
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++++++++");//3
show();
}
void show()
{
System.out.print("hehe");
}
}
class Zi extends Fu
{
int num = 9;

{
System.out.println("shiow..."+num);
num = 10;
}
Zi()
{
super();//2
//可视初始化 5
//构造代码块初始化 6
System.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

代码注释的标号为执行顺序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: