Java中this和super的用法

        在Java中有两个非常特殊的变量:this和 super,这两个变量在使用前都是不需要声明的。this变量使用在成员函数的内部,指向当前对象。super变量直接指向超类的构造函数,用来引用超类中的变量和方法。 一、this 1、区分同名的成员变量与方法参数 Example 1:
class PersonInformation

  {

   String name, gender, nationality, address;

   int age;

   void PersonInformation ( String p_name, String p_gender, 
                               String p_nationality, String p_address, int p_age )

   {

    name=p_name;

    gender=p_gender;

    nationality=p_nationality;

    address=p_address;

    age=p_age;

   }

  }
        这里,在 PersonInformation( )函数中这个对象的方法可以直接访问类成员变量,但在同一个范围中,定义两个相同的名字的局部变量是不允许的,如果要使 方法的参数 类成员变量同名的话,就需要一种方法使成员变量与跟它同名的方法参数区分开来,这就要使用到this变量。改写一下上面的代码,使PersonInformation类的构造函数的每个参数都与类成员变量同名,而类成员变量的初值由参数给出。
class PersonInformation

   {

    String name, gender, nationality, address;

    int age;

    void PersonInformation(String name, String gender, String nationality, 
                               String address, int age)

    {

    this.name=name;

    this.gender=gender;

    this.nationality=nationality;

    this.address=address;

    this.age=age;

    }

   }
        这里的构造函数中必须使用this,this在方法体中重用来指向引用当前正在执行方法的那个对象实例,为了区别参数name成员变量name,写 成name=name显然是不允许的,在参数或局部变量名与类成员变量同名的时候,由于参数或局部变量的优先级高,这样在方法体中参数名或局部变量名将隐藏同名的成员变量,因此,为了指明成员变量,必须使用this显式地指明当前对象。 2、 this还有一个用法,就是构造函数的第一个语句,它的形式是this(参数表),这个构造函数会调用同一个类的另一个对应的构造函数。 Example2:
class test_this {

       public static void main(String[] args) {

        UserInfo user = new UserInfo("abc");

        System.out.printf("the user's name is %s, and the number is %d/n",

        user.getName(), user.getNumber());

    }

}

class UserInfo

{

    private String name;

    private int number;


    public UserInfo( String name )      // Constructor1

     {

         this(name,78);

       }



    public UserInfo( String name, int number ){    //Constructor2

         this.name = name;

         this.number = number;

       }



public String getName(){

        return name;

}



public int getNumber() {

        return number;

}

}
二、super         在Java中,有时还会遇到子类中的成员变量或方法超类(有时也称父类)中的成员变量或方法同名,因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量和方法就隐藏了超类的成员变量或方法,如果此时想要使用超类中的这个成员变量或方法,就需要用到super。 Example1
class super_demo {
public static void main(String[] args) {
   City ct = new City();
	ct.setValue();
}	
}

class Country
{
    String name;

   void setValue()
  {
    name="China";
  }

}

class City extends Country {
    String name;

   void setValue()
  {
     name = "Beijing";
     super.setValue();
     System.out.println(name);
     System.out.println(super.name);
   }

}
Example2 public class Bird{     private String name;         public Bird( ){             }         public Bird(String name) {         this.name =name;     }         public void walk( ) {         System.out.println("Walk");     }             public String getName( ) {         return name;     }         public void setName(String name) {         this.name=name;             }     } public class Chicken extends Bird {     private String crest;         public Chicken ( ) {         super( );      // 用于构造函数里,继承超类的成员变量和方法     }         public Chicken(String name, String crest) {         super(name);         this.crest=crest;     }         public void setCrest(String crest) {         this.crest=crest;             }         public String getCrest( ) {         return crest;     }         public void wu(){         System.out.println("gu...gu...");     } } public class Demo {     public static void main(String[] args) {         Chicken chicken1 = new Chicken("aaa", "red");         Chicken chicken2 = new Chicken();                 System.out.printf("chicken1 name: %s, crest: %s./n", chicken1.getName(),         chicken1.getCrest());                 chicken1.wu();                 System.out.printf("chicken2 name: %s, crest: %s./n", chicken2.getName(),         chicken2.getCrest());                 chicken2.wu();     } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值