今天发现有写成这样的代码,我简单表示如下
/**
* 嵌套调用演示例子
* @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();
}