Huang Po-Hsuan
105.07.15
只整理易出錯或小重點,並非教學
共享
用 static 修飾屬性:
用 static 修飾方法:
若類別的屬性跟方法全都是靜態 (有 static)
則通常沒有建立物件的必要
技巧:可以把建構式設成 private (無法 new)
其它重點:
靜態方法不可以操作非靜態屬性
方法中不可定義靜態屬性
方法內不可再定義其它方法
Constructor (建構子,簡稱 ctor)
宣告:
若沒有另外宣告會自動產生預設建構子
預設建構子沒有任何參數
is-a v.s. has-a
交通工具
汽車
-天窗
-輪胎
is-a
has-a
is-a
(a kind of ...)
1. Generalization:
2. Realization:
has-a
(part of ...)
1. Aggregation:
2. Composition:
繼承
無多重繼承 (和 C++ 不同)
決定權在子類別
父的屬性、方法、ctor 設成 private 就不會被繼承
語法:extends (更像延伸的概念)
父
子A
子B
左圖
右圖
父
子
明確繼承:
隱含繼承:
public class ExtendsTest {
public static void main(String[] args){
Son son = new Son();//呼叫子類別ctor前會先呼叫父類別的ctor
son.fatherMethod();//使用從父類別繼承到的方法
}
}
class Father{//隱含繼承 Object
public Father(){
System.out.println("Father's ctor");
}
public void fatherMethod(){
System.out.println("Father's method");
}
}
class Son extends Father{//繼承語法
public Son(){
System.out.println("Son's ctor");
}
}
run:
Father's ctor
Son's ctor
Father's method
vararg (變長參數)
public class VarargTest {
public static void main(String[] args){
int num = VarargTest.addAll(1,2,3,4);//不管參數幾個都可
System.out.println(num);
}
public static int addAll(int... n){
int sum = 0;
for(int i:n){
sum += i;
}
return sum;
}
}
一個方法中最多只能一個,且一定是放在最後一個
呼叫時可以不傳參數
run:
10
封裝
public class SetGetTest {
public static void main(String[] args){
Account account = new Account(100);
System.out.println(account.getMoney());
}
}
class Account{
Account(int init_money){//ctor
setMoney(init_money);//DRY principle
}
public void setMoney(int money){//set
_money = money;
}
public int getMoney(){//get
return _money;
}
private int _money;
}
run:
100