「物件」與「類別」這兩個個詞,其實是同義詞。將概念作為認知的對象時稱為類別,由類別所產出的個體即為物件。這些概念因為會牽涉到每個人對於觀點、角度等認知,有時候可能會有不同的見解。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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(){ }」來符合編譯器的規定。
物件的存取
在主程式中使用建立物件並使用的例子如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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」的用意是區別私有的參數,外界在存取時比較不容易發生問題。此時我們需要來瞭解存取層級。1 2 3 4 5 6 7 | 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 |
想要從外部存取私有或受保護的資料,必須在類別中定義存取方法。要注意的是存取修飾子的層級,若希望能順利存取可參照上表賦予適合的修飾。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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語言只允許單一繼承。1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Wolf extends Dog{ void eatPeople( int peoples) { for ( int i = 0 ; i < peoples; i++) { System.out.println( "yummy! " ); } } } |
使用關鍵字extends來表達繼承觀念,繼承後類別物件的資源可以延伸和重複使用,在程式中可以利用 extends 來實作繼承關係。
1 2 3 4 5 6 | public class Fox extends Dog{ } |
沒有留言:
張貼留言