標籤:引用 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中多態的使用