要用到多型,一定是已經有子父類關係或者類實現介面等前提
格式:父類型別 變數名稱 = new 子型別行();
變數名稱.方法();
具體體現(父子類,抽象類,介面)
class fu {}class zi extends fu }//類的多型使用
fu f = new zi();//這其實就是向上轉型
abstract class fu
class zi extends fu
}//類的多型使用
fu fu= new zi(); //父類 變數名稱 = new 子類();
inte***ce fu
class zi implements fu
}//介面的多型使用
fu fu = new zi(); //介面 變數名稱 = new 介面實現類();
另外,父類被不同子類的同名方法重寫,執行的方法看子類重寫的步驟,下面是理解方式:
person p1 = new xiaoxuesheng();
person p2 = new daxuesheng();
p1.work(); //p1會呼叫xiaoxuesheng類中重寫的work方法,可能是背古詩,看子類重寫方法是什麼
p2.work(); //p2會呼叫daxuesheng類中重寫的work方法,可能是敲**,看子類重寫方法是什麼
多型框架下的兩條規則:
多型的成員變數編譯和執行依據父類(new等式的左邊)
多型的成員方法編譯看左邊(編譯中父類必須重寫方法),執行看右邊(執行過程中如果子父類方法同名,執行子類)
class fu
class zi extends fu
class demo
}
class fu
}class zi extends fu
}class demo
}
instanceof關鍵字,用於判斷物件是否屬於某種型別,會基於返回值true or false
使用格式:boolean a = 物件名稱 instanceof 資料型別;
profession a = new doctor();
boolean i = a instanceof worker; //false
boolean i = a instanceof doctor; //true
向下轉型
父類型別 變數名 = new 子類型別();
如:person p = new doctor();
子類型別 變數名 = (子類型別) 父類型別的變數;
如:doctor nur = (doctor) p;
考慮到靜態呼叫,總體來說:編譯都看左邊的父類
執行若是靜態方法,執行父類中的靜態方法(靜態方法是類
不是物件,不屬於多型範疇)
執行若是非靜態方法,執行子類重寫方法,
對於成員變數,編譯執行全看父類!
python自學筆記(十)
1.生成單調的list 1,2,3,4,5,6 可用list range 1,11 2.生成有一定規律的list 1x1,2x2,3x3,10x10 l for x in range 1,11 x x for x in range 1,11 把要生成的表示式放在前面 for迴圈 判斷條件 根據情況選...
Java自學筆記(十二)
final 可以用來修飾類,類的成員,以及區域性變數 注意 final修飾的類不能被繼承,但可以繼承其他類,俗稱 太監類 final修飾的方法不可以被重寫 覆蓋 如果父類中沒有被final修飾方法,子類重寫之後可以補充final final修飾的變數其實是常量,不能再次賦值。可以再構造方法中給fin...
JAVA自學筆記一
二 表示式 基本語句 1.算數運算子 加減乘除 取餘 運算子,均為二目運算子 結合方向自左向右 算術運算的精度由高到低排列 byte short char int long float double 當算術表示式運算過程中如果表示式中有不等的精度,結果均按照高精度排列 2.自增自減運算子 自增自減運...