Java 動態物件

Java 程式可否動態產生物件?
比方, 某個程式可以顯示動物的叫聲,
問題是: 在程式的開始之初並不會知道是什麼動物?
如果是貓 : 當然叫聲應該要是 "喵喵"
如果是狗 : 當然應該要是 "汪汪"
如果是牛 : 當然應該是 "呣呣"
如果是魚 : 當然是 "…"

因此, 物件導向的魅力就在於抽象,
也就是程式設計者只抽象的表達要動物的叫聲,
至於該怎麼叫, 那就不是這個抽象程式所應該負責的!!

底下是一個典型的例子:

代碼:

import java.lang.reflect.Constructor;   
import java.lang.reflect.InvocationTargetException;   

public class t {
    public static void main (String [] args){
       
         try {
               Class c = Class.forName("Dog");
             // Object dog = c.getConstructor(new Class[]{String.class}).newInstance(new Object[]{"Small White"});
             Object dog = c.getConstructor(new Class[]{String[].class}).newInstance(new Object[]{new String[]{"Small White"}});
             System.out.println(dog);
             
             System.out.println(c.getMethod("getName",null).invoke(dog,null));
             
         }catch (java.lang.ClassNotFoundException ex){
              System.out.println(ex.getMessage());
         }catch (java.lang.NoSuchMethodException ex){
              System.out.println(ex.getMessage());
         }catch (java.lang.InstantiationException ex){
              System.out.println(ex.getMessage());
         }catch (java.lang.IllegalAccessException ex){
              System.out.println(ex.getMessage());
         }catch (java.lang.reflect.InvocationTargetException ex){
              System.out.println(ex.getMessage());
         }
    }
}

代碼:

public class Dog {
   private String name = "Lucky";
   
   public Dog(){
   }
   
   public Dog (String [] args){
       this.name = args[0];
   }
   
   public Dog (String name){
       this.name = name;
   }
   
   public String getName(){
         return "The Name is " + this.name;
   }

   public String toString(){
         return this.name;
   }

}

廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s