java中多态_java中多态的使用

一.动手动脑

public classParentChildTest {public static voidmain(String[] args) {

Parent parent=newParent();

parent.printValue();

Child child=newChild();

child.printValue();

parent=child;

parent.printValue();

parent.myValue++;

parent.printValue();

((Child)parent).myValue++;

parent.printValue();

}

}classParent{public int myValue=100;public voidprintValue() {

System.out.println("Parent.printValue(),myValue="+myValue);

}

}class Child extendsParent{public int myValue=200;public voidprintValue() {

System.out.println("Child.printValue(),myValue="+myValue);

}

}

截图结果

f790f4e201820560b08402c1ad9ec32e.png

结论:

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定。

这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用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("我要减肥,所以每天只吃一点大米。");

}

}

5fc2ed61faa16d721472050225dfcf67.png

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;

}

}

结果截图

7f9993638fb2442ad011417b29b8413c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值