日期:2014-05-20  浏览次数:20602 次

Java小程序的疑惑
Java code
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ex02 extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
    @Override
   public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        Button btn = (Button)findViewById(R.id.button);
        Button btn2 = (Button)findViewById(R.id.button2);
        btn.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }
    public void onClick(View arg0){
        switch(arg0.getId()){
        case R.id.button:
            setTitle("this is OK button");
            break;
        case R.id.button2:
            this.finish();
            break;
        }
    }
}

[color=#FF6600]对于其中一段代码
Java code
   public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        Button btn = (Button)findViewById(R.id.button);
        Button btn2 = (Button)findViewById(R.id.button2);
        btn.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }
[/color]

我的疑问是这样的:onCreate应该是父类的函数,这里继承了父类的函数,换句话说:
父类有的东西它应该都有,而语句:super.onCreate(icicle);应该是调用父类的函数.所以
我觉得这里好像多此一举。
另外:btn.setOnClickListener(this); 应该如何理解,这里的this指的是什么.

------解决方案--------------------
由于子类和父类中都有onCreate,要调用父类的onCreate,需要加super,不加super的话,默认调用子类的onCreate。LZ强调说子类拥有父类的属性,很对,但LZ忽略一个问题,就是子类缩小了父类的范围。
------解决方案--------------------
super.onCreate(icicle); 
这句话写了跟没写是完全不同的,这与构造函数不一样。构造函数是特殊情况。
------解决方案--------------------
super.onCreate(icicle); 这句话是调用父类里的onCreate(Bundle icicle)方法,这句话我想在这里是必须使用的.如果不调用父类的此方法的话可能导致你的类初始化有问题.


btn.setOnClickListener(this); 这个应该是给Button添加点击事件,当前类实现了OnClickListener接口,而setOnClickListener()方法需要的参数就是OnClickListener.这里的this指的是当前类.也就是使用当前类处理Button点击事件.