2012-10-07 50 views
0

不完全確定如何對此進行說明,對於不明確的標題感到抱歉。無論如何,這裏的基本上是我的cuestión。運營商/作業/ Thingies關於類(Java)

基本上,我知道我可以通過使用構造器的值到類和功能等一樣,

class bob { 
    int value; 
    public bob(int x) { 
     value = x; 
    } 
} 

bob test = bob(5); 

但是,你如何處理之類的運營商等?就像,如果一個人加入一起上課:

bob test1 = bob(5), test2 = bob(3), test3 = test1 + test2; 

我如何才能讓它實際上做的事情是一個人試圖在兩個實例化的對象加在一起?

或者,如果我說的一樣,

bob test = 5; 

如何我可以做你初始化它有一個有價值的東西?

回答

2

你不能用Java做。 Java的操作符只能用於原始類型(而String是特殊異常),而常規對象只能用兼容對象或null初始化。

相反,你應該確定適當的方法和構造:

public bob add(bob other) { ... } 

然後用

bob test1 = new bob(5); 
bob test2 = new bob(3); 
bob test3 = test1.add(test2); 

既然你不能這樣做bob test = 5;,只是做bob test = new bob(5);

+0

啊。我想你可以,因爲String類的功能。 –

0

Java不是C++。如果沒有new關鍵字,則不能調用構造函數(除非使用反射,但完全是另一個話題)。您也不能重寫像+這樣的運算符來處理自定義對象類型。

相反,如果它的語義適當的對象類型的一個實例添加到另一個,您可以通過定義做一個add()方法,如:

class Bob { 
    int value; 
    public Bob(int x) { 
     value = x; 
    } 

    public Bob add(Bob other) { 
     return new Bob(this.value + (other == null ? 0 : other.value)); 
    } 
} 

然後:

Bob test1 = new Bob(5); 
Bob test2 = new Bob(3); 
Bob test3 = test1.add(test2); 
0

你的類聲明是正確的。 (在一個完全無關的主題中,按照慣例,Java類應該以大寫字母開頭,也就是說,你的類應該被命名爲Bob,但這與這個問題沒有密切關係......)

創建對象的正確語法和將參數傳遞給構造函數是:

Bob test = new Bob(5); 

至於另外,您不能直接使用操作符。有些語言允許您指定操作符對象的操作,但Java不是其中的一種。 (你可以谷歌運營商超載瞭解更多信息。)

如果你想添加類型的東西,你實際上必須爲它定義一個函數。對你來說,有兩件事情可以做:

您可以定義的實例函數:

class Bob { 
// The other stuff you listed, like the constructor and the private field 
    public Bob add(Bob other) { 
     return new Bob(value + (other == null ? 0 : other.value)); 
    } 
} 

或者,您可以定義一個靜態函數:

class Bob { 
// The other stuff you listed, like the constructor and the private field 
    public static Bob add(Bob one, Bob other) { 
     return new Bob((one == null ? 0 : one.value) + (other == null ? 0 : other.value)); 
    } 
} 

第一個,你與

test3 = test1.add(test2); 

第二個呼叫,您

調用210