把物件作為引數(轉)
把物件作為引數(轉)[@more@]到目前為止,我們都使用簡單型別作為方法的引數。但是,給方法傳遞物件是正確的,也是常用的。例如,考慮下面的簡單程式:
// Objects may be passed to methods.class Test { int a,b;
Test(int i,int j) {a = i; b = j;
}
// return true if o is equal to the invoking object
boolean equals(Test o) {
if(o.a == a && o.b == b) return true;
else return false;
}
}
class PassOb {
public static void main(String args[]) { Test ob1 = new Test(100,22);Test ob2 = new Test(100,22);Test ob3 = new Test(-1,-1);
System.out.println("ob1 == ob2: " + ob1.equals(ob2));
System.out.println("ob1 == ob3: " + ob1.equals(ob3));
}
}
該程式產生如下輸出:
ob1 == ob2: true
ob1 == ob3: false
在本程式中,在Test 中的equals() 方法比較兩個物件的相等性,並返回比較的結果。也就是,它把呼叫的物件與被傳遞的物件作比較。如果它們包含相同的值,則該方法返回值為真,否則返回值為假。注意equals 中的自變數o指定Test 作為它的型別。儘管Test 是程式中建立的類的型別,但是它的使用與Java 的內建型別相同。
物件引數的最普通的使用涉及到建構函式。你經常想要構造一個新物件,並且使它的初始狀態與一些已經存在的物件一樣。為了做到這一點,你必須定義一個建構函式,該建構函式將一個物件作為它的類的一個引數。例如,下面版本的Box 允許一個物件初始化另外一個物件:
// Here,Box allows one object to initialize another.
class Box { double width; double height; double depth;
// construct clone of an object
Box(Box ob) { // pass object to constructor
width = ob.width;
height = ob.height;
depth = ob.depth;
}
// constructor used when all dimensions specified
Box(double w,double h,double d) {width = w; height = h;depth = d;
}
// constructor used when no dimensions specified
Box() { width = -1; // use -1 to indicate height = -1; // an uninitializeddepth = -1; // box
}
// constructor used when cube is created Box(double len) { width = height = depth = len;}
// compute and return volume double volume() { return width * height * depth;}}
class OverloadCons2 {
public static void main(String args[]) { // create boxes using the various constructorsBox mybox1 = new Box(10,20,15);Box mybox2 = new Box();Box mycube = new Box(7);
Box myclone = new Box(mybox1);
double vol;
// get volume of first box
vol = mybox1.volume();
System.out.println("Volume of mybox1 is " + vol);
// get volume of second box
vol = mybox2.volume();
System.out.println("Volume of mybox2 is " + vol);
// get volume of cube
vol = mycube.volume();
System.out.println("Volume of cube is " + vol);
// get volume of clone
vol = myclone.volume();
System.out.println("Volume of clone is " + vol);
}
}
在本程式中你能看到,當你開始建立你自己的類的時候,為了方便高效的構造物件,必須為同一建構函式方法提供多種形式。
// Objects may be passed to methods.class Test { int a,b;
Test(int i,int j) {a = i; b = j;
}
// return true if o is equal to the invoking object
boolean equals(Test o) {
if(o.a == a && o.b == b) return true;
else return false;
}
}
class PassOb {
public static void main(String args[]) { Test ob1 = new Test(100,22);Test ob2 = new Test(100,22);Test ob3 = new Test(-1,-1);
System.out.println("ob1 == ob2: " + ob1.equals(ob2));
System.out.println("ob1 == ob3: " + ob1.equals(ob3));
}
}
該程式產生如下輸出:
ob1 == ob2: true
ob1 == ob3: false
在本程式中,在Test 中的equals() 方法比較兩個物件的相等性,並返回比較的結果。也就是,它把呼叫的物件與被傳遞的物件作比較。如果它們包含相同的值,則該方法返回值為真,否則返回值為假。注意equals 中的自變數o指定Test 作為它的型別。儘管Test 是程式中建立的類的型別,但是它的使用與Java 的內建型別相同。
物件引數的最普通的使用涉及到建構函式。你經常想要構造一個新物件,並且使它的初始狀態與一些已經存在的物件一樣。為了做到這一點,你必須定義一個建構函式,該建構函式將一個物件作為它的類的一個引數。例如,下面版本的Box 允許一個物件初始化另外一個物件:
// Here,Box allows one object to initialize another.
class Box { double width; double height; double depth;
// construct clone of an object
Box(Box ob) { // pass object to constructor
width = ob.width;
height = ob.height;
depth = ob.depth;
}
// constructor used when all dimensions specified
Box(double w,double h,double d) {width = w; height = h;depth = d;
}
// constructor used when no dimensions specified
Box() { width = -1; // use -1 to indicate height = -1; // an uninitializeddepth = -1; // box
}
// constructor used when cube is created Box(double len) { width = height = depth = len;}
// compute and return volume double volume() { return width * height * depth;}}
class OverloadCons2 {
public static void main(String args[]) { // create boxes using the various constructorsBox mybox1 = new Box(10,20,15);Box mybox2 = new Box();Box mycube = new Box(7);
Box myclone = new Box(mybox1);
double vol;
// get volume of first box
vol = mybox1.volume();
System.out.println("Volume of mybox1 is " + vol);
// get volume of second box
vol = mybox2.volume();
System.out.println("Volume of mybox2 is " + vol);
// get volume of cube
vol = mycube.volume();
System.out.println("Volume of cube is " + vol);
// get volume of clone
vol = myclone.volume();
System.out.println("Volume of clone is " + vol);
}
}
在本程式中你能看到,當你開始建立你自己的類的時候,為了方便高效的構造物件,必須為同一建構函式方法提供多種形式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958020/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 把介面當作引數傳入
- 物件,函式作為一個函式的引數物件函式
- 設計模式——把類作為引數的抽象工廠模式設計模式抽象
- Mybatis傳入引數為List物件MyBatis物件
- 數字作為物件的屬性物件
- 函式作為引數傳遞函式
- golang 方法作為引數傳遞Golang
- Python陷阱:為什麼不能用可變物件作為預設引數的值Python物件
- mybatis list作為引數 foreach迴圈MyBatis
- Java String作為引數的情況Java
- 把GitHub作為圖床Github圖床
- 關於C++引用做為函式引數和指標作為函式引數C++函式指標
- 在 Angularjs 中 ui-sref 和 $state.go 如何傳遞單個多個引數和將物件作為引數AngularJSUIGo物件
- 請求引數為物件,mybatis的sql寫法物件MyBatisSQL
- AIX作業系統shell的引數(轉)AI作業系統
- js獲取頁面地址引數並將其轉化為一個物件JS物件
- GO語言————6.7 將函式作為引數Go函式
- Cursor 作為引數傳遞並返回結果
- 從SESSION取得的JAVABEAN物件,不能被序列化,作為EJB的引數來傳遞?????SessionJavaBean物件
- VNPY利用郵件引擎,把引數最佳化結果作為附件傳送給預定郵箱
- 把JSON資料格式轉換為Python的類物件JSONPython物件
- Go語言Slice作為函式引數詳解Go函式
- 把物件賦給int型變數物件變數
- c++中物件的引用作為函式的引數C++物件函式
- 有沒有試過將函式作為引數(parameter)來傳遞?(推薦) (轉)函式
- 一個把IP地址轉化為長整數的指令碼(轉)指令碼
- javascript 將變數值作為物件屬性 獲取物件對應的值JavaScript變數物件
- Oracle遊標型別作為傳入傳出引數Oracle型別
- Java中將方法作為引數傳遞5種方式Java
- javascript將引數轉換為數值程式碼詳解JavaScript
- scala:函式作為值或引數進行傳遞、作為返回值進行返回函式
- 把智慧數字經營3.0作為決定未來勝負手!
- 用隱藏引數為Windows Commander提速(轉)Windows
- 核心引數(轉)
- Go中slice作為引數傳遞的一些“坑”Go
- Python之在函式中使用列表作為預設引數Python函式
- laravel中whereIn方法中使用SQL作為引數的途徑LaravelSQL
- js函式作為函式的引數程式碼例項JS函式