当前位置:  技术问答>java相关

这有一道题,请教大家

    来源: 互联网  发布时间:2015-04-11

    本文导语:  class Test{      public static void main(String [] args){          Base b = new Subclass();          System.out.println(b.x);          System.out.println(b.method());      } } class Base{      int x = 2;      int ...

class Test{

     public static void main(String [] args){

         Base b = new Subclass();

         System.out.println(b.x);

         System.out.println(b.method());

     }

}


class Base{

     int x = 2;

     int method(){

         return x;

     }

}


 class Subclass extends Base{

     int x = 3;

     int method(){

         return x;

     }

}
为什么输出是2,3呢?

|
是多态性问题,
b实际指向的是一个subClass类(子类)的对象,其上溯造型到base(父类)
此时,b(儿子)是以父亲的身分出现,别人要访问b的属性时,得到的当然是父亲的属性值,也就是b.x为2
而b.method()方法执行的是b儿子的方法,因为父亲能做的事,儿子可不一定会啊,所以返回的是3.

|
有2是因为-变量覆盖和方法覆盖-有区别,不论你实际上赋给b的是什么,b.x都指向b类的实例变量,而b.method()在会动态寻找到子类的方法。这个问题就这么解释了,具体可以看看关于对象模型的书。

|
b被造型成Base后,b.x指的是Base的x,但是Base的method方法被subclass覆盖了,所以当调用b.method()时调用的是subclass的。如果你不覆盖method,你就可以运行Base中的方法了

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一道送分的问题
  • 一道考验基础的JAVA语法题
  • 问个AIX题库的一道题,感觉答案应该是A啊
  • 关于构造函数的一道题
  • 初中计算机老师给我们出过一道题,那时候印象很深
  • 一道基础英语填空题(Java)
  • 问一道SCJP的题目
  • SCJP 模拟题一道
  • scjp考题一道
  • scjp考题一道!!!!!!!!
  • 一道SCJP的题
  • 一道SCJP题有请各大虾指教.
  • 一道题,select what & why?
  • 一道关于操作系统的题
  • 问一道算法题
  • 一道习题
  • 一道scjp的题目
  • 一道scjp模拟题,请赐教。
  • 关于操作系统的一道题目(关于临时文件)
  • 这是南京大学的一道操作系统考研题....


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3