public class A { public static void aa()
{
System.out.println("11111111111111");
}
}
public class B extends A{
public static void aa()
{
System.out.println("22222222222");
}
public static void main(String[] args)
{
A obj = new B();
obj.aa();
}
}
请问结果为什么是11111111111111?另求教:java中的方法存储在方法区中,而方法区是位于哪段内存的?静态方法也是位于这段内存吗?求比较详细深入的解释
{
System.out.println("11111111111111");
}
}
public class B extends A{
public static void aa()
{
System.out.println("22222222222");
}
public static void main(String[] args)
{
A obj = new B();
obj.aa();
}
}
请问结果为什么是11111111111111?另求教:java中的方法存储在方法区中,而方法区是位于哪段内存的?静态方法也是位于这段内存吗?求比较详细深入的解释
方法aa()是静态方法,是属于类A的方法。
STATIC 的方法是不能重写的.
可以继续研究一下重写的规则.
is equivalent to
A.aa();because obj is a class A reference variable.
obj.aa();
A类的引用指向的还是A类的地址
不知道这样解释对不对~
obj.aa();
A类的引用指向的还是A类的地址
不知道这样解释对不对~
=========================
obj是一个A类型的引用变量,在java中引用变量的类型永远不能改变, new B()创建了一个B的对象,obj指向这个B对象.超类类型的引用变量可以引用子类对象.
因为是静态方法,
A obj = new B();虽然内容是B,但是定义的类型是A,
对于静态方法来说,obj.aa()和A.aa()是一个意思。
所以会这样。LZ还可以做你更不可思议的测试:
A obj = null;
obj.aa();不会出现空指针错误,结果也是11111111111111