撰寫一個 myString class,其中包含一個String對象

題目:撰寫一個 myString class,其中包含一個String對象,可於構造函數中通過引數來設定初值。加入toString()和concatenate()。後者會將String對象附加於你的內部字符串尾端。請爲myString()實現clone()。撰寫兩個static函數,令它們都接收myString reference  x引數並調用x.concatenate(“test”)。但第二個函數會先調用clone()。請測試這兩個函數並展示其不同結果。
方法:
public class MyString implements Cloneable{
 /*撰寫一個 myString class,其中包含一個String對象,
  * 可於構造函數中通過引數來設定初值。加入toString()和concatenate()。
  * 後者會將String對象附加於你的內部字符串尾端。
  * 請爲myString()實現clone()。
  * 撰寫兩個static函數,令它們都接收myString reference  x引數並
  * 調用x.concatenate(“test”)。但第二個函數會先調用clone()。
  * 請測試這兩個函數並展示其不同結果。
  */
 /*
  “ 撰寫兩個static函數,令它們都接收myString reference x引數
   並調用x.concatenate(“test”)。但第二個函數會先調用clone()。”
   本人覺得這個意思是:“撰寫static函數,主要是因爲static是屬於類本身而不屬於對象的,
   所以可以直接用類帶點來訪問,從而簡化訪問同時可以把對象作爲參數而傳遞進去。而本程序
   想通過‘調用clone()’來拷貝,是想證明‘不調用clone()’時是對對象本身操作,而‘調用
   clone()’是對對象的副本操作而不影響對象本身”  
  */
 
 private String str;
 
 MyString(String str){
  this.str=str;
 }
 
 public String toString(){
  return str;
 }
 
 public void concatenate(String old){
  String newStr=new String();
  newStr=this.str+old;
  this.str=newStr;
 }
 
 public Object clone(){
   Object copyStr=null;
   try {
   copyStr=super.clone();
  } catch (CloneNotSupportedException e) {
   e.printStackTrace();
  }
  return copyStr; 
 }
 
 public static void method1(MyString x){
  x.concatenate("test");
  System.out.println(x.toString());
 }
 
 public static void method2(MyString x){
  ((MyString)x.clone()).concatenate("test");
  System.out.println(x.toString());
 }
 
 public static void main(String[] args) {
  MyString myStr1=new MyString("ccp330-gucheng-");
  MyString.method1(myStr1);
  MyString myStr2=new MyString("ccp330-gucheng-");
  MyString.method2(myStr2);
  /*結果爲:
  ccp330-gucheng-test
        ccp330-gucheng-
  */
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章