<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Java中使用接口實(shí)現多繼承和多態(tài)的方法

Java中使用接口實(shí)現多繼承和多態(tài)的方法

作者: 時(shí)間:2011-11-24 來(lái)源:網(wǎng)絡(luò ) 收藏
  1.JAVA里沒(méi)有多繼承,一個(gè)類(lèi)之能有一個(gè)父類(lèi)。

  而繼承的表現就是多態(tài)。一個(gè)父類(lèi)可以有多個(gè)子類(lèi),而在子類(lèi)里可以重寫(xiě)父類(lèi)的方法(例如方法print()),這樣每個(gè)子類(lèi)里重寫(xiě)的代碼不一樣,自然表現形式就不一樣。這樣用父類(lèi)的變量去引用不同的子類(lèi),在調用這個(gè)相同的方法print()的時(shí)候得到的結果和表現形式就不一樣了,這就是多態(tài),相同的消息(也就是調用相同的方法)會(huì )有不同的結果。舉例說(shuō)明:

  //父類(lèi)

  public class Father{

  //父類(lèi)有一個(gè)打孩子方法

  public void hitChild(){}

  }

  //子類(lèi)1

  public class Son1 extends Father{

  //重寫(xiě)父類(lèi)打孩子方法

  public void hitChild(){

  System.out.println("為什么打我?我做錯什么了!"); }

  }

  //子類(lèi)2

  public class Son2 extends Father{

  //重寫(xiě)父類(lèi)打孩子方法 public void hitChild(){

  System.out.println("我知道錯了,別打了!"); }

  }

  //子類(lèi)3

  public class Son3 extends Father{

  //重寫(xiě)父類(lèi)打孩子方法 public void hitChild(){

  System.out.println("我跑,你打不著(zhù)!"); }

  }

  //測試類(lèi)

  public class Test{

  public static void main(String args[]){

  Father father;

  father = new Son1();

  father.hitChild();

  father = new Son2();

  father.hitChild();

  father = new Son3();

  father.hitChild();

  }

  }

  都調用了相同的方法,出現了不同的結果!這就是多態(tài)的表現!

  2.JAVA中沒(méi)有多繼承,而用接口實(shí)現了多繼承!一個(gè)類(lèi)或是可以同時(shí)實(shí)現多個(gè)接口?。ň拖喈斢贑++里一個(gè)類(lèi)同時(shí)繼承了多個(gè)類(lèi)?。├纾?/P>

  public class Son implements Father1,Father2,Father3{

  }

  接口有利于代碼功能的擴展(增加新的功能)!而繼承則有利于代碼功能的修改(把舊的功能改成新的功能)!這里舊功能的修改和新功能的增加前提是不修改舊的功能,舊的功能仍然可以使用!舊類(lèi)的代碼也不做修改!

  接著(zhù)上面的繼承舉例:上面例子中的子類(lèi)我們統稱(chēng)為一代子類(lèi)

  1.用繼承修改舊的功能。

  現在如果一代Son1的功能打孩子,也就是方法hitChild()里邊的功能實(shí)現有問(wèn)題,我們要把具體實(shí)現修改掉,那么我們可以重新寫(xiě)一個(gè)新的二代子類(lèi)Son11繼承自一代子類(lèi)Son1,并重寫(xiě)其hitChild()方法。

  //二代子類(lèi)

  public class Son11 extends Son1{

  //重寫(xiě)父類(lèi)打孩子方法

  public void hitChild(){ System.out.println("我是二代子類(lèi)對此方法的新實(shí)現");

  }

  }

  2.用接口實(shí)現增加新的功能。

  現在類(lèi)Son1已經(jīng)有了‘打孩子’功能(也就是方法),而我們有了新的需求,我們需要它還要有一個(gè)新的功能‘寵孩子’(新方法pet();)。而舊的代碼不能動(dòng)!那么我們可以定義一個(gè)新的接口(PetInterFace),接口里定義這個(gè)方法pet()的聲明。再重新寫(xiě)一個(gè)二代子類(lèi)Son11,讓它先繼承類(lèi)Son1,同時(shí)實(shí)現接口 PetInterFace!并實(shí)現接口里的 pet()方法!

  //新接口

  public interface PetInterFace{

  //新功能方法 public void pet();

  }

  //二代子類(lèi)

  public class Son11 extends Son1 implements PetInterFace{

  //實(shí)現接口方法

  public void pet(){

  System.out.println("父親很愛(ài)我!");

  }

  }

  這樣這個(gè)二代子類(lèi)即有了老的方法,又有新的功能!

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

c++相關(guān)文章:c++教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>