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

关于继承的问题

    来源: 互联网  发布时间:2015-08-24

    本文导语:  class Test1 {     private String s=new String("Test1 ");          public void append(String a) { s += a;     }            public void f() { append("f() ");      }          public void print() { System.out.println(s);    ...

class Test1 {
    private String s=new String("Test1 ");
    
    public void append(String a) {
s += a;
    }
      
    public void f() {
append("f() "); 
    }
    
    public void print() {
System.out.println(s);
    }
}

public class Test extends Test1 {
    String s = new String("Test ");

    public void f() {
append("Test.f() ");
super.f();
    }

    public static void main(String[] args) {
Test x=new Test();

x.f();
x.print();
System.out.println(x.s);
    }
}

为什么运行结果为:
Test1 Test.f() f() 
Test 

为什么append()修改的是Test1的s而不是Test的s?

|
别人的回答,转载一下!
回复人: illia(蓝雪) (  ) 信誉:100  2002-3-28 0:20:06  得分:10  
 
 
  在java中,当子类定义了与父类同名的属性变量时,即出现了子类变量对同名父类变量的隐藏。
所谓隐藏就是指子类拥有两个同名变量,一个继承自父类,一个由自己定义。当子类执行继承自父类的操作时,处理的是继承自父类的变量,当执行由子类本身定义的操作时,处理就是自己定义的变量,而把继承自父类的变量“隐藏”起来。
也就是说,在Derived类创建的时候,分配了两个x的空间,但是对于外部来说,它只有一个变量x。
而方法的继承则和域中变量的继承不一样:当父类中一个方法被子类覆盖时,它所占用的内存空间将被完全清空,父类的方法在子类中将不复存在。
Base类的对象b的创建是通过new一个Derived来完成的,因此b这个句柄指向的对象其实是Derived类的一个实例,在实例b中,内存空间中分配了两个同名的x,b.show()由于在Derived类里被覆盖了,调用的也是Derived类里面的show()方法,因此这个show()操作的是Derived类里面的x,所以值为2。而b.x=3是因为b的类型是Base,b.x是显式的调用Base类里继承的变量x,所以显示的是Base类所赋的值。
  
 

|
属性是不会被重载的,所以当你在Test中调用append方法时,它首先在test中寻找,没找到后会到父类Test1中寻找,然后执行s+=a;因为属性不能重载,所以它引用的是自己的s(Test1)。

|
楼上的说的对。属性不能被重载,只能被覆盖。
还有私有变量或方法,只能在定义他的类里面调用。,

|
Re:奇怪,我在jb7中跟踪调试时,s的值一直显示:Test,但最后却打印出Test1 Test.f() f() ,不知是不是一个bug?

你跟踪的是类Test中的s吧?但打印的是Test1中的s.


|
楼上的都正确,关键是属性没有多态性。而方法是有多态性的,所以出现如上结果。

|
属性没有多态性。而方法是有多态性的,

    
 
 

您可能感兴趣的文章:

  • java继承的问题
  • 问一个很蠢的问题:什么是重载,继承,实例,派生,接口
  • 子进程继承锁的问题
  • 关于类的继承问题!着急!
  • 关于多重继承问题的答谢,请pengji(彭乃超)来领分!
  • 关于多重继承问题的答谢,请ajoo(jet pig)来领分!
  • 关于多重继承问题的答谢,请mygarfield((我被CSDN封杀过)) 来领分!
  • 关于多重继承问题的答谢,请Dickensi(流星·逐日)(★★★★) 来领分!
  • 菜鸟问题:请大家用简单的代码描述一下,如何利用接口实现多重继承!
  • 问一个继承编译的问题,急!!!!!
  • 关于继承和覆盖的问题
  • 又是一个继承问题
  • 一个继承的问题
  • 关于继承的问题。。。。。
  • 关于子类继承父类的问题,很简单的。进来看看吧
  • 关于继承和实现的一个一般问题
  • 简单的继承问题..........
  • 有关Java构造函数的问题之三——继承性
  • 关于引用传递/继承,解决问题,立即结贴
  • 关于父类static 方法继承的问题!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java没有多继承,用接口来实现多继承的功能,但哪里体现了多继承啊?我对接口的概念一直弄不清楚,请大家帮忙!
  • C++多重继承与虚继承分析
  • 关于java的访问控制和继承,这段话怎么理解?
  • 接口继承类是怎么一回事?
  • 如何使JPanel中的一个继承JPanel的组件的尺寸发生动态改变???
  • 想继承统一软件包里的类怎么办?
  • 如何让exec出的进程继承原来打开的流?
  • fork出来的进程不能完全继承父进程的属性吗?
  • 急!我使用一个继承了JComponent的类绘图,我想将绘的图绘到Image,有什么办法吗?
  • 子进程为什么没有继承父进程的信号
  • jb中如何编译带继承的class,是否需要把父类import进来,应怎么样写?(新手,线等)
  • 怎样用接口(interface)实现多重继承?
  • 怎么把一个自己的编写的没有继承任何类的类destroy掉
  • 从jFrame继承的窗口,怎样初始为最大化?
  • 异常的继承和搜索??高手请进!!
  • 继承一个protected函数,怎样在子类中让它完成父类的功能
  • 求java.io包中的类的继承关系!
  • 从线称组继承为什么不行?(在线等待,搞定立即给分)
  • 继承!!!
  • 如何安装GMA 900的继承显卡驱动


  • 站内导航:


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

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

    浙ICP备11055608号-3