1. 程式人生 > >Java中多型轉型的問題理解及多型概述

Java中多型轉型的問題理解及多型概述

一、虛擬碼

class 孔子爹 {
	public int age = 40;

	public void teach() {
		System.out.println("講解Java");
	}
}

class 孔子 extends 孔子爹 {
	public int age = 20;

	public void teach() {
		System.out.println("講解論語");
	}

	public void playGame() {
		System.out.println("打DotA");
	}
}

二、故事

Java培訓特別火,很多人來請孔子爹去講課,這一天孔子爹被請走了,但是還有人來請,就剩孔子在家,價格還挺高。孔子一想,我是不是可以考慮去呢?然後就穿上爹的衣服,帶上爹的眼鏡,粘上爹的鬍子。就開始裝爹...


三、問題解答及理解

//向上轉型
孔子爹 k爹 = new 孔子();
//到人家那裡去了
System.out.println(k爹.age); //40
k爹.teach(); //講解論語
//k爹.playGame(); //這是兒子才能做的
	
//講完了,下班回家了
//脫下爹的裝備,換上自己的裝備
//向下轉型
孔子 k = (孔子) k爹; 
System.out.println(k.age); //20
k.teach(); //講解論語
k.playGame(); //英雄聯盟

附一:多型概述

某一個事物,在不同時刻表現出來的不同狀態。

舉例:

貓可以是貓的型別。貓 m = new 貓();

同時貓也是動物的一種,也可以把貓稱為動物。動物 d = new 貓();


 多型的前提和體現:

1、有繼承關係

2、有方法重寫

3、有父類引用指向子類物件

附二:多型的分類

        a:具體類多型

                class Fu {}

                class Zi extends Fu {}

                Fu f = new Zi();

        b:抽象類多型

                abstract class Fu {}

                class Zi extends Fu {}

                Fu f = new Zi();

        c:介面多型

                interface Fu {}

                class Zi implements Fu {}

                Fu f = new Zi();