在java中如果用戶編寫類的時候沒有提供構造函數 (建構式),那麼編譯器會自動提供一個默認構造函數
它會把所有的實例字段設置为默認值:所有的數字變量初始化为0;所有的布爾變量設置为false;所有對象變量設置为null;
ex :
public class myClass {
// 建構式
public myClass(){
}
}
- extends 繼承:
java中的繼承,和C++中是有差別的.比如JAVA不支持多重繼承。但是JAVA可以通過implements來實現額外的接口.
ex :DogDeriveClass就全盤繼承了AnimalBaseClass中的所有方法;
public
{
// 建構式
public myClass(){
}
};
如果還需要其它功能,那麼則可以通過implements關鍵字來實現需要用到的接口.
ex :
public class DogDeriveClass extends AnimalBaseClass Implements Shout, Run
{
// 建構式
public myClass(){
}
};
- implements 實現:
Implements關鍵字在class聲明中使用,以指示所聲明的類提供了在implements關鍵字後面的名稱所指定的接口中所聲明的所有方法的實現。
接口中的方法不能是static,因为static不能被派生類重寫(Override)。
ex:
public class UserSurfaceView extends SurfaceView implements Android.view.SurfaceHolder.Callback
{
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int with, int heigh)
{
//TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
//TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
//TODO Auto-generated method stub
}
};
- interface 接口:
介面有點像是完全沒有任何方法被實作的抽象類別,但實際上兩者在語義與應用上是有差別的。
1. 「繼承某抽象類別的類別必定是該類別的一個子類」:透過繼承父類別型態進行多型操作。
2. 「實作某介面的類別並不被歸屬於哪一類」:一個物件上可以實作多個介面。
介面的宣告是使用"interface"關鍵字,宣告方式如下:
interface 介面名稱 {
傳回型態 方法(參數列);
傳回型態 方法(參數列);
// ....
}
ex:
public interface Android.view.SurfaceHolder.Callback
{
void surfaceChanged(SurfaceHolder holder, int format, int with, int heigh);
void surfaceCreated(SurfaceHolder holder);
void surfaceDestroyed(SurfaceHolder holder);
};
由於接口中的方法聲明默認就是public的,因此不需要特意加上public修飾符.
ex : 自定義一個 Class 繼承 Dialog 的自創對話框介面,透過 Interface Function 自訂義此 Class之button 的 myOnClickListener。
使用此 myOnClickListener 來執行 外部所對應的動作:
- MyDialog 部分:
public class MyDialog extends Dialog {
public MyDialog(Context context, myOnClickListener myclick) {
super(context);
this.myListener = myclick;
}
public myOnClickListener myListener;
// This is my interface //
public interface myOnClickListener {
void onButtonClick();
}
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.alert);
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View arg0) {
// 外部所宣告 interface function : myOnClickListener
// 將會插入在此處,並執行其內容。
myListener.onButtonClick(); // I am giving the click to the
// interface function which we need
// to implements where we call this
// class
}
});
}
}
- main Activity
import com.coderzheaven.interfacedemo.MyDialog.myOnClickListener;
...
public class MainActivity extends Activity {
public myOnClickListener myListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// create new onclicklistener interface //
myListener = new myOnClickListener() {
@Override
public void onButtonClick() {
System.out.println("I am clicking the button in the dialog");
Toast.makeText(getApplicationContext(),
"I am clicking the button in the dialog",
Toast.LENGTH_LONG).show();
}
};
MyDialog mydialog = new MyDialog(this, myListener);
mydialog.show();
}
}
參考資料:
- JAVA 構造器,extends[繼承],implements[實現],Interface[接口],reflect[反射],clone[克隆],final,static,abstract[抽象] :http://fanli7.net/a/bianchengyuyan/C__/20120807/199962.html
- Java Gossip: 介面(interface)型態 ;http://www.openhome.cc/Gossip/JavaGossip-V1/InterfaceType.htm
- How to extend a Dialog class and write it’s button click on your activity using Interfaces in Android?:http://www.coderzheaven.com/2013/02/13/extend-dialog-class-write-its-button-click-activity-interfaces-android/
沒有留言:
張貼留言