首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一道简单的多态有关问题

2012-01-01 
一道简单的多态问题publicclassA{publicstaticvoidaa(){System.out.println( 11111111111111 )}}public

一道简单的多态问题
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中的方法存储在方法区中,而方法区是位于哪段内存的?静态方法也是位于这段内存吗?求比较详细深入的解释


[解决办法]

方法aa()是静态方法,是属于类A的方法。
[解决办法]
去掉STATIC 关键字.看看结果是什么?
STATIC 的方法是不能重写的.
可以继续研究一下重写的规则.
[解决办法]
Static methods belong to the class.

obj.aa();
is equivalent to
A.aa();

because obj is a class A reference variable.
[解决办法]
表态方法不是动态邦定的,也就无所谓的多态

[解决办法]
基于安全考虑,java不允许直接访问内存,我想这个问题是没有意义的
[解决办法]
方法是放在栈上的,java中只有栈和堆的概念,而且是不可操作的,全部交给jvm来处理,因为aa()是一个static方法,obj是一个A的引用变量,所以编译器是A.aa()这样调用的

[解决办法]
A obj = new B();
obj.aa();
A类的引用指向的还是A类的地址
不知道这样解释对不对~
[解决办法]
static的方法不能被重写
[解决办法]
A obj = new B();
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

热点排行