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

//面试
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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值