伊莉討論區

標題: 請問有像String 的用法嗎? [打印本頁]

作者: ahway9988    時間: 2019-3-10 10:50 PM     標題: 請問有像String 的用法嗎?

已知 覆寫物件的toString() 方法可以讓物件在print印出已寫好的訊息:如下
public class T031022 {
    public static void main(String[] args) {
        Test t =new Test();
        System.out.println(t);
    }
}
class Test{
    @Override
    public String toString(){
        return "default output";
    }
}

即印出結果為:default output

但可以讓它像String 一樣,讓t 直接指定為某個字串 嗎? 如下

t="test output";
System.out.println(t);

就跟String 的用法一樣
感謝orz





作者: jackyo04    時間: 2019-3-11 08:26 AM

一般來說都是用String t = "test output";
如果不用String,至少要讓程式知道t是什麼東西,至於為何不用string這點就不太清楚你的需求
作者: ahway9988    時間: 2019-3-11 09:33 AM

jackyo04 發表於 2019-3-11 08:26 AM
一般來說都是用String t = "test output";
如果不用String,至少要讓程式知道t是什麼東西,至於為何不用str ...

我想看java的自由度有多少,如果物件能夠=字串,那也表示也有可能讓它等於數字,或者說,甚至可以讓某A物件=B物件,如果能在內部先寫好賦值的是物件的那個屬性的話
我是因為想到物件會有toString 所以才會想說還有沒有其它像這樣的用法,toString  是輸出, 那有沒有輸入 這樣的問題  
作者: kwj    時間: 2019-3-11 07:58 PM

本帖最後由 kwj 於 2019-3-11 08:11 PM 編輯
ahway9988 發表於 2019-3-11 09:33 AM
我想看java的自由度有多少,如果物件能夠=字串,那也表示也有可能讓它等於數字,或者說,甚至可以讓某A物件=B ...

感覺您好像不太了解「強型別」的語言是怎麼回事....。建議您先去了解一下強型別和弱型別的差別,然後再來思考您的這個問題。

首先先幫忙釐清一個問題,您的問題中提到的這段程式碼:
  1. public class T031022 {
  2.     public static void main(String[] args) {
  3.         Test t = new Test();
  4.         System.out.println(t);
  5.     }
  6. }

  7. class Test{
  8.     @Override
  9.     public String toString(){
  10.         return "default output";
  11.     }
  12. }
複製代碼
這段程式碼之所以能夠正確地印出 default output,是因為 System.out.println() 會隱性地自動呼叫物件的 toString() 函式。其中「隱性地」指的是即使我沒有在上面寫 t.toString(),它也會自動幫我呼叫 t.toString()。但這個特性僅限於 toString() 而已,因為這是 System.out.println() 這個方法裡面自己實作的。

推薦可以參考一下:http://www.codedata.com.tw/book/java-basic-source/ch11-5.htm

回到強型別的問題。如果我有兩個類別 A 和 B,互相之間沒有繼承(extend)或實作(implement)的關係,那麼這兩個類別就不能互相指派。例如下面的程式碼就會有 compile error。
  1. public class A {}
  2. public class B {}

  3. public class Application {
  4.   public static void main(String[] args) {
  5.     A a = new A();
  6.     B b = a; // compile error
  7.     call(a);  // compile error, too
  8.   }

  9.   public static void call (B b) {
  10.     // Do nothing
  11.   }
  12. }
複製代碼
但如果 A 繼承了 B,則同樣的程式碼就不會有錯誤。
  1. public class A extends B {}
  2. public class B {}
複製代碼

作者: ahway9988    時間: 2019-3-11 10:51 PM

kwj 發表於 2019-3-11 07:58 PM
感覺您好像不太了解「強型別」的語言是怎麼回事....。建議您先去了解一下強型別和弱型別的差別,然後再來 ...

突然懂了QQ
原來我一直搞錯,以為java 對物件執行會有它的行為,原來只是SyStem.out.println()自己有定義要怎麼處理toString ()方了 orz
繼承部份,還在頭痛中
作者: wacla    時間: 2019-9-17 10:59 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: ahway9988    時間: 2019-9-30 06:38 AM

wacla 發表於 2019-9-17 10:59 PM
一般來說 , 幾乎大部分的程式語言都是有宣告變數的動作 , 只是會分強弱型別.例如
Java宣告字串變數, 因為 ...

謝謝你,我想問的就是這個
原來關鍵字是強弱型別。




歡迎光臨 伊莉討論區 (http://a04.eyny.com/) Powered by Discuz!