注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

shally

笑看庭前花开花落

 
 
 

日志

 
 

Java中this与super关键字  

2011-06-19 15:49:49|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一.super关键字

1.调用父类的构造方法:super.x,super.play

  子类不能继承父类的构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用,且必须使用关键字super来表示,而且super必须是子类构造方法中的头一条语句。如下所示:

public class MyRightTriangle extends MyTriangle{  

public MyRightTriangle(double a,double b) throws Exception{ 

      super(a, b, Math.pow(a*a+b*b, 0.5)); } 

@Override

public double GetArea() {  

   return super.a*super.b/2; } 

@Override

public double GetPerimeter () {

   return super.a+super.b+super.c; }

注意:1)如果在子类的构造方法中,没有使用关键字super调用父类的某个构造方法,则默认有语句“ super();”,即调用父类不带参数的构造方法;

2)如果雷利定义了一个或者多个构造方法,那么Java不提供默认的构造方法(不带参数的构造方法),故,当父类定义多个构造方法时,应当包括一个不带参数的构造方法,以防子类省略super时出现错误。

2.操作被子类隐藏了的成员变量和方法

子类中的成员变量或方法与超类(有时也称父类)中的成员变量或方法同名,因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量和方法就隐藏了超类的成员变量或方法,如果此时想要使用超类中的这个成员变量或方法,就需要用到super。 

public class MyRectangle implements MyShape{ 

private double height;

protected double width; 

public double getWidth(){

   return width;

}

public MyRectangle(double h,double w) {

      this.height=h;

      this.width=w;

   } 

   public double GetArea() {

      return width*height;

   } 

   public double GetPerimeter () {

      return 2*(height+width);

   }

} 

public class MySquare extends MyRectangle{ 

public MySquare(double length){

   super(length, length); }

二.this关键字

1.区分同名的成员变量与方法参数

this在方法体中重用来指向引用当前正在执行方法的那个对象实例,为了区别参数(name)和成员变量(name),写 成name=name显然是不允许的,在参数或局部变量名与类成员变量同名的时候,由于参数或局部变量的优先级高,这样在方法体中参数名或局部变量名将隐藏同名的成员变量,因此,为了指明成员变量,必须使用this显式地指明当前对象,使用方法是“this.成员名”,而不带this的那个便是形参。如下: 

public class MyRectangle implements MyShape{ 

private double height;

protected double width; //成员变量

public double getWidth(){

   return width; }

   public MyRectangle(double h,double w) //形参

{    this.height=h;

      this.width=w;  } 

   public double GetArea() {

      return width*height;  } 

   public double GetPerimeter () {

      return 2*(height+width);

   } }

2.this还有一个用法,就是构造函数的第一个语句,它的形式是this(参数表),这个构造函数会调用同一个类的另一个对应的构造函数。

class User   
{     
    private String name;     
    private int age;      
    public User( String name )      
     {     
         this(name,20);    
      }   

public UserInfo( String name, int number ){     
         this.name = name;     
         this.age = age;     
       }    
public String getName(){     
        return name;    
}    
public int getAge() {     
        return age;   
  }  

要谨记:this变量使用在成员函数的内部,指向当前对象super变量是直接指向超类的构造函数,用来引用超类中的变量和方法。

  评论这张
 
阅读(1296)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017