物件導向三大屬性
封裝
主要是隱藏物件的屬性,僅對外公開介面的部分,其餘部分不允許修改,是為保護程式的一個手段。
多型
分為兩種多型
一種是方法的過載,是指同一類有多個同名的方法,但是由於引數不同因此編譯時可以確定呼叫哪個方法。
一種是方法的覆蓋,同樣的方法中父子類別可以有不同的表現形式
繼承
繼承父類別的動作以及變數,不能變更被設定為private的變數
public class A {
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("A and A");
}
}
public class B extends A{
public String show(B obj){
return ("B and B");
}
public String show(A obj){
return ("B and A");
}
}
public class C extends B{
}
public class D extends B{
}
public class Test {
public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println("1--" a1.show(b));
// a1 是 A 找尋Aclass中的show,b 是 new B() B extends A 因此算在A obj內
System.out.println("2--" a1.show(c));
// a1 是 A 找尋Aclass中的show,c 是new C() C extends B 因此算在A obj內
System.out.println("3--" a1.show(d));
// a1 是 A 找尋Aclass中的show,d obj 是 A內的方法
System.out.println("4--" a2.show(b));
// a2 是 A 找尋Aclass中的show,b 是 new B() B extends A 是 A obj 而由於 A class 被 B class覆寫
//因此優先使用Bclass中的show(A obj)
System.out.println("5--" a2.show(c));
// a2 是 A 找尋Aclass中的show,c 是 new C() C extends B 是 A obj 而由於 A class 被 B class覆寫
//因此優先使用Bclass中的show(A obj)
System.out.println("6--" a2.show(d));
// a2 是 A 找尋Aclass中的show,d 是 new D() 在Aclass的方法
System.out.println("7--" b.show(b));
// b.show(b obj) 找到方法 輸出
System.out.println("8--" b.show(c));
// c 是 new C() extends B 因此算在b.show(b obj)內
System.out.println("9--" b.show(d));
// d 雖然沒有在 Bclass 內 但是Bclass有繼承Aclass中的屬性,算是擴充(extends)
//因此同樣可以找到'方法關於show(d obj)的部分 雖然是在Aclass
}
}
1--A and A
2--A and A
3--A and D
4--B and A
5--B and A
6--A and D
7--B and B
8--B and B
9--A and D
try catch的定義
是用於當程式出現bug時可以順利執行的動作。
當try失敗的時候,catch可以抓到Exception後還是能讓程式正常運行。
留言
張貼留言