「物件」與「類別」這兩個個詞,其實是同義詞。將概念作為認知的對象時稱為類別,由類別所產出的個體即為物件。這些概念因為會牽涉到每個人對於觀點、角度等認知,有時候可能會有不同的見解。
public class Dog { int height; //身高 int weight; //體重 String color; //顏色 //建立方式 dog(){ } //帶參數的建立方式 Dog(int height, int weight, String color){ this.height=height; this.weight=weight; this.color=color; } void bark(String str) { //叫的方法 System.out.println(str); } void eat(int food) { for(int i = 0; i < food; i++;){ } } }
「this」用於區分類別變數名稱與方法內的變數名稱,帶有「this」的變數就是指明此變數為類別的變數名稱。
有1個或1個以上的帶參數建立方式時,才需要「dog(){ }」來符合編譯器的規定。
物件的存取
在主程式中使用建立物件並使用的例子如下:public class CH01401 { public static void main(String[] args) { Dog Lucky=new Dog(); Lucky.weight=7500f; Lucky.height=120.5f; Lucky.color="snow"; Lucky.bark("bow!"); // Dog Puppy = new Dog(6300, 100, "gray"); Puppy.bark("woof!"); } }
dog( ){ } 和
Dog(float height, float weight, String color)
上面2個敘述都可以用於建立「dog」,差別在於是建立時是否帶參數。沒有帶參數的建立方式視情況可能要有「=」的方式存取內容,帶有參數的建立方式則有可能建立「dog」的部份屬性。
公有或私有
將原有的變數名稱前加上「private」會使得原有的程式碼出現編譯錯誤。「private」的用意是區別私有的參數,外界在存取時比較不容易發生問題。此時我們需要來瞭解存取層級。private int height; // 身高是狗的隠私 private int weight; // 體重是狗的隠私 private String color; // 顏色是狗的隠私 public void bark(String str) // 狗一定會叫所以不是隱私
將「Dog」做出以上的修改會發現範例程式出現編譯錯誤,問題出在不同的存取層級的存取權限。
這些問題只要以日常生活看待設計者的思絡,規則只有3種請參照下表:。
修飾子名稱 | 同一類別 | 同一套件 | 不同套件的子類別 | 不同套件的非子類別 |
---|---|---|---|---|
private | OK | |||
空白 | OK | OK | ||
protected | OK | OK | OK | |
public | OK | OK | OK | OK |
想要從外部存取私有或受保護的資料,必須在類別中定義存取方法。要注意的是存取修飾子的層級,若希望能順利存取可參照上表賦予適合的修飾。
public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public String getColor() { return color; } public void setColor(String color) { this.color = color; }
set and get 方法在eclipse中可以自動完成
在程式碼區右鍵或是功能表列找到 source
source → generate getters and setters 選取名稱後就會自動產生程式碼
繼承
在建立新類別的時在類別後方增加關鍵字「extends 類別名稱」該類別的所有屬性和方法都隨著建立並立刻可以使用。這使得類別物件的資源可以延伸和重複使用,在程式中也可將「extends」來實作延伸多類別關係。繼承關係實際若沒有嚴謹的設計容易發生問題,為了避免多重繼承的不確定性與複雜性JAVA語言只允許單一繼承。public class Wolf extends Dog{ void eatPeople(int peoples) { for(int i = 0; i < peoples; i++) { System.out.println("yummy! "); } } }
使用關鍵字extends來表達繼承觀念,繼承後類別物件的資源可以延伸和重複使用,在程式中可以利用 extends 來實作繼承關係。
public class Fox extends Dog{ }
沒有留言:
張貼留言