黑马程序员技术交流社区

标题: 为什么成员变量没有覆盖一说,应该叫隐藏? [打印本页]

作者: Cheers_for_CRAZ    时间: 2013-11-7 20:59
标题: 为什么成员变量没有覆盖一说,应该叫隐藏?
本帖最后由 Cheers_for_CRAZ 于 2013-11-8 08:51 编辑
  1. public class Test1 {
  2.         int i=1;
  3.         public void run(){
  4.                 System.out.println("this is Test1 class run");
  5.         }
  6.         public static void main(String[] args) {
  7.                 B b=new B();
  8.                 b.run();
  9.         }
  10. }
  11. class B extends Test1{
  12.         int i=1;
  13.         public void run(){
  14.                 super.run();
  15.                 System.out.println("this is B class run"+super.i);
  16.         }
  17. }
  18. /*
  19. * 用super可以调用父类中的成员变量和成员方法
  20. *  为什么说成员变量没有覆盖一说,应该叫隐藏?
  21. *  为什么成员方法的覆盖不叫隐藏?
  22. */
复制代码

作者: 零下五度的水    时间: 2013-11-7 21:40
个人认为:只是叫法问题吧。。就像为什么类就叫继承,接口就叫实现呢,本质不都是那么一回事么

作者: spiderman    时间: 2013-11-7 23:00
我也同意楼上的说法,本质上应该是一样的,但是叫法不一样而已。但是我也不能太明确就是这样,因为这涉及到Java的内存结构,java是怎样在内存中处理这些数据的细节我还不了解。但是就我学习的内容,理解来看,无论是方法,还是变量,子父类都会在内存中存在,如果有一样的成员,只不过如果不指明super,那么会默认用子类的方法和变量......不过,真心羡慕楼主的注意力,像这种小的细节,我可能都留意不到。留意不到,就会遗漏知识点,就会学的很肤浅。。。。楼主加油哈
作者: 649个伤心的理由    时间: 2013-11-11 16:39
个人认为从语言的功能性来看,成员变量没有覆盖的必要,因为就算覆盖了,也得不到什么新的功能,新的好处。而方法的覆盖就可以得到一个有新功能的方法,这是有好处的。至于楼主说的隐藏,其实叫什么只是翻译的问题,覆盖的英文是override,非要翻译成隐藏也未尝不可,只不过没人这么译罢了。“成员变量没有覆盖一说,应该叫隐藏?”,既然子类定义与父类同名的的成员变量没什么明显好处,最好连个名字也别取,大家也别这么做。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2