2010年5月11日 星期二

JAVA Encapsulation(Java 封裝) , get/set method

§JAVA封裝,get與set method
封裝觀念在物件導向中語沒有什麼不同,只是Java的get與set使用方式上與ActionScript3規則不太相同,以下將Java與AS3,的get與set使用方式整理一下。

Java Encapsulation Example:
Java中可由abstract宣告,告知編譯器這是抽象類別。
這是一個Animal(動物)類別,他是一個抽象類別(形容並代表各種動物,並非具體的形容),所以宣
告為abstract,在JAVA中宣告為abstrace的類別是不可以透由new實體化物件

//Animal 類別
//命名空間,在Win系統上package代表一個資料架,這代表Animal這個類是放在animal資料夾理。
package animal; 
abstract public class Animal
{
 //宣告一個型別String,名稱為food的私有變數。
 private String _food;
 //建構子,Java的建構子是支援overlod的,之後談到method的overload再來介紹。
 public Animal()
 {
  //建構式,java中若不編輯,會自動隱含宣告一個空args的建構式。
 }
 //Food 封裝
 public void setFood(String food)
 {
  if(_food == food)
   return;
  _food = food;
 }
 public String getFood()
 {
  return _food;
 }
}
 

//這是Dog的Class,繼承了Animal
package canine;
import animal.Animal;
public class Dog extends Animal
{
 public Dog()
 {
  super();
 }
}
 
 //TestCode,這是Java程式起點main()
import canine.Dog;
import animal.Animal;
public class TestCode
{
 public static void main(String[] args)
 {
  Animal dog1 = new Dog();
  //get set 呼叫依然保留method樣子,與as3不同
  dog1.setFood("寶路一號");
  //這是Java中Console的輸出方式,println輸出後會換行。
       //System.out.println(dog1.getFood()+" 吃完啦");
 }
}

ActionScript3 Encapsulation Example:
//AS3動物的抽象類,但是as3無抽象關鍵字可以宣告,所以即時抽象類不該被實體化,依然可以
//實體化,為什麼不該實體化抽象類,深入淺出一書明白提到你能想像"動物"長什麼樣子嗎?
//這是AS3中Animal的物件
package animal
{
 public class Animal
 {
  private var _food:String;
  public function Animal()
  {
  }
  public function set food(food:String):void
  {
   if(_food == food)
    return;
   _food = food;
  }
  public function get food():String
  {
   return _food;
  }
 }
}
 
//Dog物件
package canine
{
 import animal.Animal;
 public class Dog extends Animal
 {
  public function Dog()
  {
   super();
  }
 }
}

//TestCode , 程式起始點
<?xml version="1.0" encoding="utf-8"?>
<mx:Application applicationComplete="main();" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script>
  <![CDATA[
  import animal.Animal;
  import canine.Dog;
  private var dog1:Animal;
  private function main():void
  {
   dog1 = new Dog();
   dog1.food = "寶路二號";
   trace(dog1.food + " 吃完啦!");
  }
  ]]>
 </mx:Script>
</mx:Application>

沒有留言:

張貼留言