super 和 this

经典例子:

super指向父类,用于引用父类的构造方法。  

this指向本类,用于引用本类中的其他方法。

class Person {  
    public static void prt(String s) {  
       System.out.println(s); 
    }  
    Person() {  
       prt("A Person.");  
    }//构造方法(1)  
    Person(String name) {  
       prt("A person name is:" + name);  
    }//构造方法(2)  
}  
public class Chinese extends Person {  
    Chinese() {  
       super(); // 调用父类构造方法(1)  
         prt("A chinese.");// (4)  
    }  
    Chinese(String name) {  
       super(name);// 调用父类具有相同形参的构造方法(2)  
         prt("his name is:" + name);  
    }  
    Chinese(String name, int age) {  
      this(name);// 调用具有相同形参的构造方法(3)  
       prt("his age is:" + age);  
    }  
    public static void main(String[] args) {  
       Chinese cn = new Chinese();  
       cn = new Chinese("kevin");  
       cn = new Chinese("kevin", 22);  
    }  

}

 

执行结果为:  

A Person.  

A chinese.  
A person name is:kevin  
his name is:kevin  


A person name is:kevin  


his name is:kevin  

his age is:22  
下边总结一下super和this的异同:  

1)super(参数):调用父类的构造方法 。  
2)this(参数):调用本类的其他构造方法。  
3)都必须放在构造方法的第一行。  super:引用父类中的成员,当子类和父类中的方法重名时,这样用。  

4)this:代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)。  
5)this()和super()都指的是对象,所以,均不能在static环境中使用。包括:static变量,static方法,static语句块。  

6)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。  

接下来来看看,android 中:

类.this :

public class MainActivity extends Activity {

    private Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.button = (Button) this.findViewById(R.id.Button01);
        this.button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, NextActivity.class);
                startActivity(intent);
            }
        });
    }
}

android 中实现Activity 跳转的时候 intent.setClass(Context context,Class<?> cls) 需要传入一个Context 参数,

这时不能用this,因为this表示的是当前对象,指的是实现OnClickListener的匿名内部类的对象,为了得到外部类MainActivity 的对象,就必须用MainActivity.this

 

你可能感兴趣的:(super 和 this)