§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>
沒有留言:
張貼留言