java中多態的使用

來源:互聯網
上載者:User

標籤:引用   color   並且      log   als   val   多態   super關鍵字   

 一.動手動腦

 

public class ParentChildTest {    public static void main(String[] args) {        Parent parent=new Parent();        parent.printValue();        Child child=new Child();        child.printValue();                parent=child;        parent.printValue();                parent.myValue++;        parent.printValue();                ((Child)parent).myValue++;        parent.printValue();            }}class Parent{    public int myValue=100;    public void printValue() {        System.out.println("Parent.printValue(),myValue="+myValue);    }}class Child extends Parent{    public int myValue=200;    public void printValue() {        System.out.println("Child.printValue(),myValue="+myValue);    }}

結果

結論:

當子類與父類擁有一樣的方法,並且讓一個父類變數引用一個子類對象時,到底調用哪個方法,由對象自己的“真實”類型所決定。

這就是說:對象是子類型的,它就調用子類型的方法,是父類型的,它就調用父類型的方法。

如果子類與父類有相同的欄位,則子類中的欄位會代替或隱藏父類的欄位,子類方法中訪問的是子類中的欄位(而不是父類中的欄位)。如果子類方法確實想訪問父類中被隱藏的同名欄位,可以用super關鍵字來訪問它。
如果子類被當作父類使用,則通過子類訪問的欄位是父類的!

二:動手動腦

 

動物園

public class Zoo {    public static void main(String args[]){        Feeder f = new Feeder("小李");        //飼養員小李餵養一隻獅子        f.feedAnimal(new Lion());        //飼養員小李餵養十隻猴子        for (int i = 0; i < 10; i++) {            f.feedAnimal(new Monkey());        }        //飼養員小李餵養5隻鴿子        for (int i = 0; i < 5; i++) {            f.feedAnimal(new Pigeon());        }    }}class Feeder {    public String name;    Feeder(String name)     {        this.name = name;    }        public void feedAnimal(Animal an)    {        an.eat();    }}abstract class Animal {    public abstract void eat();}class Lion extends Animal {    public void eat()    {        System.out.println("我不吃肉誰敢吃肉!");    }}class Monkey extends Animal {    public void eat()     {        System.out.println("我什麼都吃,尤其喜歡香蕉。");    }}class Pigeon extends Animal {        public void eat()     {        System.out.println("我要減肥,所以每天只吃一點大米。");    }}

  

ATM機的實現:

import java.util.Scanner;public class ATM {private  static String name;private  static String Data;private  static String mima;  static double money;  static ATM code=new ATM("嶽志浩","11.13","123456",1000);static Scanner str=new Scanner(System.in);public ATM(String name1,String Data1,String mima1,double money1){name=name1;Data=Data1;mima=mima1;money=money1;}/*public static  void qu(){System.out.println("選擇存取金額"+"\n"+"1、100元"+"\n"+"2、500"+"\n"+"3、1000"+"\n"+"4、1500"+"\n"+"5、2000"+"\n"+"6、5000"+"\n"+"7、其他金額");int caozuo=str.nextInt();if(caozuo==1){    if(money<100)    {    System.out.println("餘額不足");    qu();    }money=money-100;System.out.println("餘額"+money);}if(caozuo==2){    if(money<500)    {    System.out.println("餘額不足");    qu();    }money=money-500;System.out.println("餘額"+money);}if(caozuo==3){    if(money<1000)    {    System.out.println("餘額不足");    qu();    }money=money-1000;System.out.println("餘額"+money);}if(caozuo==4){    if(money<1500)    {    System.out.println("餘額不足");    qu();    }money=money-1500;System.out.println("餘額"+money);}if(caozuo==5){    if(money<2000)    {    System.out.println("餘額不足");    qu();    }money=money-2000;System.out.println("餘額"+money);}if(caozuo==6){   if(money<5000)    {    System.out.println("餘額不足");    qu();    }money=money-5000;System.out.println("餘額"+money);}if(caozuo==7){double money1=str.nextDouble();    money=money-money1;System.out.println("餘額"+money);}}*/public static  void qu(){System.out.println("選擇存取金額"+"\n"+"1、100元"+"\n"+"2、500"+"\n"+"3、1000"+"\n"+"4、1500"+"\n"+"5、2000"+"\n"+"6、5000"+"\n"+"7、其他金額");int caozuo=str.nextInt();Qu a=new Qu();if(caozuo==1){Qu100 b=new Qu100();a=b;b.qu(code);System.out.println("餘額"+money);}if(caozuo==2){Qu500 b=new Qu500();a=b;b.qu(code);System.out.println("餘額"+money);}if(caozuo==3){Qu1000 b=new Qu1000();a=b;a.qu(code);System.out.println("餘額"+money);}if(caozuo==4){Qu1500 b=new Qu1500();a=b;a.qu(code);System.out.println("餘額"+money);}if(caozuo==5){Qu2000 b=new Qu2000();a=b;a.qu(code);System.out.println("餘額"+money);}if(caozuo==6){Qu5000 b=new Qu5000();a=b;a.qu(code);System.out.println("餘額"+money);}}public static void zhuan(){System.out.println("輸入要轉入的卡號");String ka=str.next();System.out.println("輸入要轉入金額");double money1=str.nextDouble();money=money-money1;System.out.println("轉賬成功");}public static void cun(){System.out.println("輸入存取金額");double money1=str.nextDouble();money=money+money1;System.out.println("餘額"+money);}public static void xugai(){System.out.println("輸入要修改的密碼");String mima1=str.next();mima=mima1;}public static void main(String args[]){System.out.println("輸入密碼");String mima1=str.next();if(mima1.equals(ATM.mima)){int x=0;while (x!=5){if(x==1){qu();}if(x==2){cun();}if(x==3){zhuan();}if(x==4){xugai();}if(x==5){System.out.println("使用者名稱:"+name+"日期:"+Data+"餘額:"+money);break;}System.out.println("選擇操作");System.out.print("1.取款"+"\n"+"2.存款"+"\n"+"3.轉賬"+"\n"+"4.修改密碼"+"\n"+"5.退卡");int w=str.nextInt();x=w;}}else {System.out.println("密碼錯誤");}}}class Qu{public void qu(ATM a){}}class Qu100 extends Qu{public void qu(ATM a){a.money=a.money-100;}}class Qu500 extends Qu{public  void qu(ATM a){a.money=a.money-500;}}class Qu1000 extends Qu{public void qu(ATM a){a.money=a.money-1000;}}class Qu1500 extends Qu{public void qu(ATM a){a.money=a.money-1500;}}class Qu2000 extends Qu{public void qu(ATM a){a.money=a.money-2000;}}class Qu5000 extends Qu{public void qu(ATM a){a.money=a.money-5000;}}

  結果

 

java中多態的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.