第三章—對象轉型

在這裏插入圖片描述
在這裏插入圖片描述
把一種形式轉成另一種形式

向上轉型:父類對象引用指向子類對象

反之爲向下轉型

Animal a = new Animal(“name”);
原來指向的是new出來的一隻Animal
在這裏插入圖片描述
可是下面的代碼不指向Animal了,指向別的了,指向Dog
a = new Dog(“bigyellow”, “yellow”);
a的類型爲Animal類型
Animal類型 指向了一隻狗的對象,在程序裏會把這隻狗當成一隻普通的Animal,
把這隻狗當成一隻普通的Animal時,那麼furColor就不能訪問了
在這裏插入圖片描述
嚴格的講在a的眼裏只是看到了name
在這裏插入圖片描述
這一部分(裏面的那部分),雖然確實有
在這裏插入圖片描述

父類引用指向子類對象看到的只是作爲父類的那部分所擁有的屬性和方法,子類那部分的沒看到

//想要訪問furColor時
Dog d1 = (Dog) a; // 要加強制轉換符
System.out.println(d1.furColor); // yellow
定義了一個局部變量d1
d1 = a; 所以兩個變量指向同一個對象

實際當中a是指向了這個狗的對象但是它只看到狗裏面作爲Animal裏面的對象
d1 = (Dog) a; 所以它指向想了這隻狗而且做了一個強制轉換,所以d1看到的不再是Animal裏面的對象而是整個的狗
在這裏插入圖片描述
面向對象的可擴展性:當建築建好了或者程序寫好之後 ,將來要加一些功能,儘量的不要去修改主結構,這叫可擴展性好(現在要在大樓邊上添加一個廚房,那麼只需要在旁邊蓋就可以了)

父類引用子類對象時可以寫到一個方法裏(下面)
public void f(Animal2 a) {
		System.out.println("name: " + a.name);
		if (a instanceof Cat2) {
			Cat2 cat2 = Cat2(a);
			System.out.println(" " + cat2.eyesColor+ " eyes");
		}else if (a instanceof Dog2) {
			Dog2 dog2 = (Dog2)a;
			System.out.println(" " + dog2.furColor+ " fur");
		}
	}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章