* 【多態】
* 5、多態的應用
*
* 基礎班學生:
* 學習、睡覺
* 高級班學生:
* 學習、睡覺
*
* 可以將這兩類事物進行抽取。
*
* 把事物不斷抽象,找出的共性
*
* 對類型進行抽取,導致多態的產生,操作同一個大類型,對大類型中所有的小類型都能進行操作
* 就因爲這個思想,才提高了擴展性的思想
*
*/
abstract class Stu{
public abstract void study();
public void sleep(){
System.out.println(" tang sleep");
}
}
class BaseStu extends Stu{
public void study(){
System.out.println(" base");
}
public void sleep(){
System.out.println(" base sleep");
}
}
class advStu extends Stu{
public void study(){
System.out.println(" adv");
}
public void sleep(){
System.out.println(" adv sleep");
}
}
class DoStu{
public void doSome(Stu stu){
stu.study();
stu.sleep();
}
}
public class Demo_Duotai3 {
public static void main(String []args){
DoStu ds=new DoStu();
ds.doSome(new BaseStu());
ds.doSome(new advStu());
}
}
---------------------------------------------------------------------------------------------------------------------------
/*【多態】【有狀態的時候返回看看第8天第4個視頻。】
* 6、多態出現在代碼中的特點(多態使用的注意事項)
*/
class Fu1{
void method1(){
System.out.println("FU-1");
}
void method2(){
System.out.println("FU-2");
}
}
class Zi1 extends Fu1{
void method1(){
System.out.println("-1");
}
void method3(){
System.out.println("-3");
}
}
public class Demo_Duotai4 {
public static void main(String []args){
Fu1 f=new Zi1();
f.method1();
f.method2();
//f.method3(); 子類特有的方法,所以編譯失敗。f所屬類型Fu1中沒有3這個方法
/*
* 在多態【非靜態】成員函數的特點
* 在編譯時期,參閱引用類型變量所屬的類型中是否有調用方法
* 如果有便通過,沒有則編譯失敗
* 在運行時期,參閱對象所屬的類中是否有調用方法。
*
* 【簡單一點】就是:成員函數在多態調用時,編譯看左邊,運行看右邊。
*
* 非靜態有重寫的特性
* 上面很常見。
* 下面兩種情況很少見。
* 設計到面試的環節:
* 在多態中,成員變量的特點,無論編譯和運行,都參考左邊(引用性變量所屬的類 )。
*
* 在多態中,靜態函數的特點,無論編譯和運行都看左邊。
在簡單一點來說就是,非靜態,左編右運,靜態是編運看左
*
*/
/*
Zi1 z=new Zi1();
z.method1();
z.method2();
z.method3();
*/
}
}
【應用】
/*
* 多態小應用
* 需求:
* 電腦運行示例
* 電腦運行基於主板。
*/
interface PCI{
public void open();
public void close();
}
class MainBoard{
public void run(){
System.out.println("MainBoard");
}
public void usePCI(PCI p){// PCI p=NetCard()//接口型引用指向自己的子類對象。
if(p!=null){
p.open();
p.close();
}
}
}
class NetCard implements PCI{
public void open(){
System.out.println("open");
}
public void close(){
System.out.println("close");
}
}
public class Demo_Duotai5 {
public static void main(String[] args) {
MainBoard mb=new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());
}
}
黑馬官網: http://edu.csdn.net/heima