黑马程序员技术交流社区
标题:
回答问题时看到不懂的一个知识
[打印本页]
作者:
常佳杰
时间:
2012-6-18 14:46
标题:
回答问题时看到不懂的一个知识
public class BaseClass {
BaseClass() {
method();
}
public void method() {
System.out.println("BaseClass的方法");
}
}
class SupClass extends BaseClass
{
private String str = "supClass";
public void method()
{
//super(); 下面代码是用匿名内部类实现对method的重写,也就是用的是父类的方法,但是方法体是子类的
new BaseClass()
{
public void method()
{
System.out.println("SupClass.method()");
System.out.println(str);//如果这样写的话,这里就有个问题出现了,
str是什么时候被初始化成null的,父类是不存在str的引用
}
}.method();
}
}红色字体部分的详细解释?
作者:
孙安庆
时间:
2012-6-18 15:37
匿名内部类访问局部变量必须要用final修饰
作者:
车风波
时间:
2012-6-18 17:48
当SupClass (子类)进入内存就默认初始化了,也就是null。
作者:
王月
时间:
2012-6-18 22:45
如果LZ是在测试类中创建了SupClass的对象,SupClass s=new SupClass(),str结果肯定是null,
因为在创建对象时子类的对象先会调用父类的构造方法,如果子类没有,会在子类中默认加个个BaseClass() {super();}。
super()就是在指向父类的构造方法,因为有重写,所以不会执行父类中的method()方法,执行的是子类中的。
现在答案出来了,因为直接调用了method()方法,它的属性 str 只是被默认初始化为null,还没有被初始化完毕,所以结果才为null。
LZ明白了吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2