一.动手动脑
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("选择存取金额"+" "+"1、100元"+" "+"2、500"+" "+"3、1000"+" "+"4、1500"+" "+"5、2000"+" "+"6、5000"+" "+"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("选择存取金额"+" "+"1、100元"+" "+"2、500"+" "+"3、1000"+" "+"4、1500"+" "+"5、2000"+" "+"6、5000"+" "+"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.取款"+" "+"2.存款"+" "+"3.转账"+" "+"4.修改密码"+" "+"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; } }
结果截图