今日計劃(已經完成的):
看了一篇圖像分割的文獻
《瘋狂的java講義》——149~169
閱讀筆記:
- 關於多態:
多態是指編譯的時候是父類型,運行的時候是子類型,每一個子類型都重寫父類型的某個函數a。在運行的時候每個子類型都會執行自己相對性的函數a,這樣就實現了多態。
由於編譯的時候是父親類型,所以只能調用父親的方法,或者是父類型和子類型都有的方法,不能調用子類型有但父類型沒有的方法。
對比一下這兩個程序的運行結果就有所明白:
package practice;
class base1{
//準備一個方法
public void haha() {
System.out.println("父類型的函數haha");
}
void test(int a) {//會被子類型重寫的函數
System.out.println("父類型的test:"+a);
}
}
class base2 extends base1{
void test(int a) {//會被子類型重寫的函數
System.out.println("base2子類型的test"+a);
}
}
//函數重載,三種不同的方式
public class base3 extends base1{
void test(int a) {//會被子類型重寫的函數
System.out.println("base3子類型的test"+a);
}
public static void main(String[] args) {
base1 b=new base2();
base1 bb=new base3();//創建兩個對象
b.test(1);
bb.test(2);
}
}
VS
class base1{
//準備一個方法
public void haha() {
System.out.println("父類型的函數haha");
}
void test(int a) {//會被子類型重寫的函數
System.out.println("父類型的test:"+a);
}
}
class base2 extends base1{
void test() {//會被子類型重寫的函數
System.out.println("base2子類型的test");
}
}
//函數重載,三種不同的方式
public class base3 extends base1{
void test() {//會被子類型重寫的函數
System.out.println("base3子類型的test");
}
public static void main(String[] args) {
base1 b=new base2();
base1 bb=new base3();//創建兩個對象
b.test(1);
bb.test(2);
}
}
- 關於實例變量
【代碼如下】:
class base1{
public String name="cheng";
//準備一個方法
public void haha() {
System.out.println("父類型的函數haha");
}
void test(int a) {//會被子類型重寫的函數
System.out.println("父類型的test:"+a);
}
}
class base2 extends base1{
public String name="yi";
void test() {//會被子類型重寫的函數
System.out.println("base2子類型的test");
}
}
//函數重載,三種不同的方式
public class base3 extends base1{
public String name="ming";
void test() {//會被子類型重寫的函數
System.out.println("base3子類型的test");
}
public static void main(String[] args) {
base1 b=new base2();
base1 bb=new base3();//創建兩個對象
b.test(1);
System.out.println(b.name);
bb.test(2);
System.out.println(bb.name);
}
}
-
引用變量的強制類型轉換
也就是說:子類實例可以隨時轉換成父類實例,但是父類實例只有在實際上是子類實例時才能轉換成子類型。對於數值類型來說,可以隨意轉換。 -
instanceof運算符
存在繼承關係,可以使用instanceof運算,也就是說編譯可以通過。如果不存在繼承關係,壓根沒法通過編譯。
- 繼承與組合
final修飾一個類,它將不能夠被繼承。
1、組合需要傳遞參數
2、組合的時候需要對類進行初始化,並將其設置成private屬性,比較安全,參看155面例子。
3、使用組合關係並不意味着更大的開銷,使用繼承的時候一樣要對父類進行初始化。
- 初始化塊
1、不論初始化塊是在主函數的前面還是後面,都在這個類的構造函數之前執行。
2、初始化塊相當於將構造函數中無參的部分拿出來了,使得代碼更加健壯提高可維護性。
3、若有多個初始化塊,按順序執行。
4、
package practice;
public class Base2 {
public static void main(String[] args) {
Base2 b2=new Base2();
System.out.println(b2.name);
}
{
name="yi";
}
public String name="cheng";
}
這個程序的結果是"cheng",也就是說,初始化塊和變量初始化的效果一樣。
5、
- 靜態初始化塊:
1、【代碼示例】:
結果:
解釋:
- 關於包裝類的相互轉化