JAVA 8 多態

來源:互聯網
上載者:User

標籤:

物件導向的第三個特徵,多態:

 可以理解為事物存在的多種狀態。 1,多態的體現:父類的引用指向了自己的子類,父類的引用可以接收子類對象。Animal c1 = new Cat();  c1.eat();  function(new Dog());  function(new Pig());  public static void function (Animal c) {  c.eat(); }  2,多態的前提        必須是類與類之間有關係,要麼是繼承,要麼是實現。        通常還有前提,存在覆蓋。3,多態的應用 4,多態的好處        大大的提高了程式的擴充性 5,弊端        提高了擴充性,但是只能使用父類的引用訪問父類中的成員。 例子程式: class Zx{ public static void main(String []arr) {   Animal c1 = new Cat();  c1.eat();  function(new Dog());  function(new Pig()); }   public static void function (Animal c) {  c.eat(); }} abstract class Animal{ public abstract void eat();} class Cat extends Animal{ public void eat() {  System.out.println("吃魚"); } public void catchMouse() {  System.out.println("抓老鼠"); }  } class Dog extends Animal{ public void eat() {  System.out.println("骨頭"); } public void kanjia() {  System.out.println("看見"); }}  class Pig extends Animal{ public void eat() {  System.out.println("飼料"); } public void gongDi() {  System.out.println("公地"); }}  修改之前的 class Zx{ public static void main(String []arr) {  Cat c = new Cat();  Cat c1 = new Cat();  function(c);  function(new Dog());  function(new Pig()); } public static void function (Cat c) {  c.eat(); }  public static void function (Dog c) {  c.eat(); }  public static void function (Pig c) {  c.eat(); }} abstract class Animal{ public abstract void eat();} class Cat extends Animal{ public void eat() {  System.out.println("吃魚"); } public void catchMouse() {  System.out.println("抓老鼠"); }  } class Dog extends Animal{ public void eat() {  System.out.println("骨頭"); } public void kanjia() {  System.out.println("看見"); }}  class Pig extends Animal{ public void eat() {  System.out.println("飼料"); } public void gongDi() {  System.out.println("公地"); }}   需求: Animal a= new Cat();  a.eat();想調用貓的特有方法,強制將父類的引用轉成子類的類型,向下轉型。Cat c =(Cat) a;c.catch.Mouse; 但是不可以Animal a = new Animal();Cat c = (Cat)a;多態自始至終都是子類在變化。   關鍵字 instanceof:判斷 對象的引用是否指向某類型 Cat m = new Cat(); m instanceof Cat;   truea  instanceof Dog; false  多態中成員函數(非靜態)的特點: 在編譯時間期:參閱參考型別所屬的類中是否有調用的方法,如果有,則編譯通過,否則失敗。在運行時期:查閱對象所屬的類中是否有調用的方法。成員函數在多態調用是,編譯看左邊,運行看右邊。 在多態中,成員變數(和靜態方法)特點:無論編譯還是運行,成員變數都參考左邊。     多態的應用舉例:  class Zx{ public static void main(String []arr) {   MainBoard mb = new MainBoard();  mb.ran();  mb.usePCI(null);  mb.usePCI(new NetCard());  mb.usePCI(new MuCard());  }} class MainBoard{ public void ran() {  System.out.println("main board ran");  } public void usePCI(PCI P) /*介面型引用指向自己的子類對象,介面不可以建立對象,多態的應用之一,  提高了程式的擴充性,降低了耦合性*/ {  if(P!=null)  {   P.open();   P.close();  }  }   } interface PCI{ public void open(); public void close(); }class NetCard implements PCI{ public void open() {  System.out.println("net open"); } public void close() {  System.out.println("net close"); }} class MuCard implements PCI{ public void open() {  System.out.println("mu open"); } public void close() {  System.out.println("mu close"); }}     擴充性舉例: 需求:資料庫的操作 1,串連資料庫2,操作資料庫3,關閉資料庫連接  下面寫 UserInfoDao ui = new UserInfoByJDBC(); 即可   Object 類: 是所有對象的直接或者間接父類。該類中定義的是所有所有對象都具備的功能。 class Demo //預設 extends Object{} Object.squals(Object obj); //傳回值為 true or false 當二者地址值相同為true  Object.toString();//返回該對象的字元表示   返回   “類名@地址值”地址值為16進位Object.hanshCode //返回int   十進位的 地址值   

JAVA 8 多態

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.