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

关于this的特殊用法

    来源: 互联网  发布时间:2015-03-17

    本文导语:  下面这个程序使用cast this来访问非直接的父类成员,也涉及到了方法的动态绑定。一般的动态绑定,我是知道的。 我就是看不太明白带星号注释的几行,请高手解释一下 public class ShadowTest {   public static void main(...

下面这个程序使用cast this来访问非直接的父类成员,也涉及到了方法的动态绑定。一般的动态绑定,我是知道的。
我就是看不太明白带星号注释的几行,请高手解释一下

public class ShadowTest
{
  public static void main(String s[])
  {
    new STChild().demo();
  }
}


class STGrandParent
{
  double wealth = 50000.00;
  public double getWealth()
  {
    System.out.println("GrandParent-" + wealth);
    return wealth;
  }
}


class STParent extends STGrandParent
{
  double wealth = 100000.00;
  public double getWealth()
  {
    System.out.println("Parent-" + wealth);
    return wealth;
  }
}


class STChild extends STParent
{
  double wealth = 200000.00;

  public double getWealth()
  {
    System.out.println("Child-" + wealth);
    return wealth;
  }

  public void demo()
  {
    getWealth(); // Calls Child method
    
    super.getWealth(); // Calls Parent method
    
    //super.super.getWealth(); // Compiler error, GrandParent method cannot be accessed
    
    ((STParent)this).getWealth(); // *****Calls Child method, due to dynamic method lookup
    
    ((STGrandParent)this).getWealth(); // *****Calls Child method, due to dynamic method lookup


    System.out.println(wealth); // Prints Child wealth
    System.out.println(super.wealth); // Prints Parent wealth
    System.out.println(((STParent)this).wealth); // Prints Parent wealth
    System.out.println(((STGrandParent)this).wealth); // Prints GrandParent wealth
  }
}

|
this就是一个STChild    这样写就比较清楚了:
STChild x=this;

((STParent)x).getWealth(); 
这时应该是STChild的getWealth()被调用(override)

((STGrandParent)this).getWealth(); 
这时仍然应该是STChild的getWealth()被调用(override)


对于field,是“hide",所以
System.out.println(((STParent)this).wealth); 是10000.0 
wealthSystem.out.println(((STGrandParent)this).wealth); 是5000.0 

super指向”直接父类“,所以
System.out.println(super.wealth); 是10000.0

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












  • 相关文章推荐
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • jquery $(this)和this的区别
  • 请问:this是什么?
  • this关键字如何使用?
  • 在jsp文件中, this代表的意思???
  • 内容管理系统 THIS
  • 在一个类中this.filled = 12312312;filled= 12312312;有什么区别
  • this 到底怎么用啊!!!救我!
  • how to use 'this' in EJB?
  • 这个THIS是指什么??
  • java中的“this”问题,请高手指教一二!
  • jQuery this 与$(this)的差别
  • 小弟一直弄不明白this这个关键字。
  • 通过$(this)使用jQuery包装后的方法或属性
  • this 代表什么?
  • 请问:buttonsign定义为一个JButton,那么,buttonsign.addActionListener(this)是什么意思??
  • Semaphore was not declared in this scope
  • 初级问题,BangBean2.this是什么意思?其中BangBean2是个类
  • php this、self、parent有什么区别?
  • 关于this的简单的问题!!!!!!!!!
  • this 代表什么? iis7站长之家


  • 站内导航:


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

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

    浙ICP备11055608号-3