「物件」與「類別」這兩個個詞,其實是同義詞。將概念作為認知的對象時稱為類別,由類別所產出的個體即為物件。這些概念因為會牽涉到每個人對於觀點、角度等認知,有時候可能會有不同的見解。
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{
}






沒有留言:
張貼留言