2019/4/4

今日計劃(已經完成的):

看了一篇圖像分割的文獻
《瘋狂的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、【代碼示例】:
    在這裏插入圖片描述在這裏插入圖片描述
    結果:
    在這裏插入圖片描述
    解釋:
    在這裏插入圖片描述
  • 關於包裝類的相互轉化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章