类转型
?變量之間支持相互轉換,比如int a=(int)3.5;
類也可以相互轉型,但是只限于有繼承關系的類。
子類可以轉換成父類,而父類不能轉換成子類,子類是繼承類父類的所有+自己的,即子類大于父類
可以向上轉型不能向下轉型(比如你大于10,你可以說它大于9,如果你小于10你不能說它小于9,即可以從大到小,不能從小到大)
如果想父類轉為子類
除非這個父類本身就是從子類轉化過來的
定義一個man轉型為human,然后obj1本身就是human類型
第二句就是把human強制轉型為man(父類轉子類),編譯器沒有報錯,因為obj1本身起源是man。
類型轉換帶來的作用就是多態
子類繼承了父類的所有方法,但子類可以重新定義一個名字、參數和父類一樣的方法,這種行為叫重寫,不同于重載的是
重載是名字一樣但參數的類型或個數不一樣,這個重寫是一模一樣(相當于一個方法替換另一個方法)
子類的方法的優先級高于父類
obj2調用的依然是man中的eat方法,雖然做了強制轉換,但是轉型之前是obj1
?多態的作用:
①以統一的接口來操縱某一類中的不同的對象的多態行為
/*以統一的方式來遍歷一個結構里面的每一種元素的方法,這種方法不是統一的而是自身的*/
②對象之間的解耦
package mooc_5_3;public class AnimalTest {public static void main(String[] args) {Animal[] as=new Animal[4];//as[0]=new Cat();//繼承于Animal,隱式轉型為Animal(子類轉父類)as[1]=new Dog();as[2]=new Cat();as[3]=new Dog();for(int i=0;i<as.length;i++){as[i].move();//調用每個元素的move方法;}}} package mooc_5_3;public interface Animal{//接口public void eat();public void move();} package mooc_5_3;public class Cat implements Animal{//實現Animal接口public void eat(){System.out.println("Cat : I can eat");}public void move(){System.out.println("Cat : I can move");}} package mooc_5_3;public class Dog implements Animal{public void eat(){System.out.println("Dog : I can eat");}public void move(){System.out.println("Dog : I can move");}}?
總結
- 上一篇: ANSI编码和Unicode编码的不同
- 下一篇: 使用jsp实现word、excel格式报