今天发现有写成这样的代码,我简单表示如下


/**
  * 嵌套调用演示例子
  * @author zhouwei
  */ 
public class T2 extends T{

	@Override
	protected void test() {
		System.out.println("in T2 class");
		
	}
    
	public static void main(String[] args) {
		T  t = new T2();
		t.calc();
	}
}


abstract class T{
	static int flag=0;
	void calc(){
		System.out.println("in T class");
		test();
T t = new T2();
		t.calc();
	}




这实际构成了一个死循环,实际代码比这个要复杂.T2 调用calc,calc生成T2对象,T2对象又调用calc


需要修改下,修正死循环


/**
  * 嵌套调用演示例子
  * @author zhouwei
  */ 
public class T2 extends T{

	@Override
	protected void test() {
		System.out.println("in T2 class");
		
	}
    
	public static void main(String[] args) {
		T  t = new T2();
		t.calc();
	}
}


abstract class T{
	static int flag=0;
	void calc(){
		System.out.println("in T class");
		test();
		if(flag ==0 ){
			flag =1;
			T t = new T2();
			t.calc();
		}
	}
	protected abstract void test();
}