java多态课后作业

一、验证

1子类和父类定义了一模一样的方法

 

·结果是100200200200201

·父类调用了子类的方法,但是方法中调用的变量是子类的变量

·自我总结:子类中的方法,如果调用同名变量,则调用的是子类的。

总结:

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

·这个特性实际上就是面向对象“多态”特性的具体表现。

·如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

·如果子类被当作父类使用,则通过子类访问的字段是父类的!

 二、动手动脑

1)动物园中的一个开发场景:某动物园有一饲养员小李,每天需要给他所负责饲养的狮子、猴子和鸽子喂食。请用一个程序来模拟他喂食的过程。(使用接口代替抽象基类)

 ·源代码

import java.util.Vector;

public class Zoo

{

public static void main(String[] args)

{

Feeder f = new Feeder("小李");

Vector<Animal> ans = new Vector<Animal>();

  

//饲养员小李喂养一只狮子

ans.add(new Lion());

//饲养员小李喂养十只猴子

for (int i = 0; i < 10; i++) {

ans.add(new Monkey());

}

    //饲养员小李喂养5只鸽子

for (int i = 0; i < 5; i++) {

ans.add(new Pigeon());

}            

f.feedAnimals(ans);

}

}  

class Feeder

{

    public String name;

    Feeder(String name)

    {

        this.name = name;

    }

    public void feedAnimals(Vector<Animal> ans)

   {

     for (Animal an : ans) {

     an.eat();

     }

   }

}

interface Animal

{

    public abstract void eat();

}

class Lion implements Animal

{

    public void eat()

   {

        System.out.println("我不吃肉谁敢吃肉!");

    }

}

class Monkey implements Animal  

{

    public void eat()

    {

        System.out.println("我什么都吃,尤其喜欢香蕉。");

    }

}

class Pigeon implements Animal  

{

    public void eat()

    {

        System.out.println("我要减肥,所以每天只吃一点大米。");

    }

}

·结果

 
   

2)多态实现ATM

·源代码

import java.util.Scanner;

import java.io.*;

public class Money{

static Kehu[] stu=new Kehu[100];

static int n=0;

static int j=0;

static boolean state=true;

static Scanner str=new Scanner(System.in);

public static void main( String args[])

{//姓名,账户,密码,日期,余额

stu[0]=new Kehu("王帆","wf","wfs","20161115",10000);

stu[1]=new Kehu("志浩","wf","wfs","20161115",10000);

n=2;

boolean state=true;

System.out.println("输入登陆密码 ");

String mima=str.next();

int q;

for(q=0;q<n;q++)

{

if(mima.equals(stu[q].getmima()))

{

j=q;

System.out.println("登陆成功!");

break;

}

}

if(q==n)

{System.out.println("用户输入错误密码,则提示该卡已被锁定,无法操作!");state=false;}

while(state)

{

/*System.out.println("输入登陆账号密码 ");

for(int i=0;i<n;i++)

{

if(str.next().equals(stu[i].getnum()))

if(str.next().equals(stu[i].getmima())){

j=i;

System.out.println("登陆成功!");}

else

System.out.println("失败!");

break;

}*/

menu();

switch(str.nextInt()){

case 1:

{

System.out.println("1.1002.5003. 15004. 20005.50006.其他");

int num=str.nextInt();

if(num==1)

{Qu s=new Qu100();s.get(stu[j]);break;}

else if(num==2)

{Qu s=new Qu500();s.get(stu[j]);break;}

else if(num==3)

{Qu s=new Qu1500();s.get(stu[j]);break;}

else if(num==4)

{Qu s=new Qu2000();s.get(stu[j]);break;}

else if(num==5)

{Qu s=new Qu5000();s.get(stu[j]);break;}

else if(num==6)

{

Qu s=new Qu00();s.get(stu[j]);

break;

}

}

case 2:

{

System.out.println("输入要存款");

cun(str.nextInt(),stu[j]);

break;

}

case 3:

{

System.out.println("输入转账行号姓名");

String na=str.next();

for(int i=0;i<n;i++)

{

if(stu[i].getname().equals(na))

{

System.out.println("输入要转款 ");

int qu=str.nextInt();

zhuan(qu,stu[j]);

break;

}

if(i==n)

{System.out.println("失败! ");break;}

}

break;

}

case 4:

{

System.out.println("输入要修改的密码 ");

update(stu[j],str.next());

break;

}

case 5:

{

cha(stu[j]);

break;

}

case 6:

{

System.out.println("已退出! ");

state=false;

break;

}

default:

{

System.out.println("输入指令有错误!请重新输入! ");

break;

}

}

}

}

public static void menu()

{

System.out.println("********************");

System.out.println("石家庄铁道大学软件工程系学生ATM管理系统");

System.out.println("********************");

System.out.println("1、 取款");

System.out.println("2、 存款");

System.out.println("3、 转账汇款");

System.out.println("4、 修改密码");

System.out.println("5、 查询余额");

System.out.println("6、退出");

System.out.println("********************");

}

public static void cun(int cun,Kehu k)

{

System.out.println(k.getname()+"的余额为:"+(k.getyue()+cun));

k.setyue(k.getyue()+cun);

}

public static void zhuan(int zhuan,Kehu k)

{

if(k.getyue()-zhuan<0)

System.out.println("余额不足!");

else

{

System.out.println("转账成功,余额为:"+(k.getyue()-zhuan));

k.setyue(k.getyue()-zhuan);

}

}

public static void cha(Kehu k)

{

System.out.println("余额为:"+k.getyue());

}

public static void update(Kehu k,String mima)

{

k.setmima(mima);

}

}

class Kehu

{

private String name;

private String num;

private String date;

private String mima;

private int yue;

public Kehu(String na,String nu,String s,String sc,int y)

{//姓名,账户,密码,日期,余额

num=nu;

name=na;

date=sc;

mima=s;

yue=y;

}

public void setname(String n)

{

name=n;

}

public void setnum(String n)

{

num=n;

}

public void setmima(String n)

{

mima=n;

}

public void setdate(String n)

{

date=n;

}

public void setyue(int n)

{

yue=n;

}

public int getyue()

{

return yue;

}

public String getnum()

{

return num;

}

public String getname()

{

return name;

}

public String getdate()

{

return date;

}

public String getmima()

{

return mima;

}

}

class Qu

{

public void get(Kehu k){}

}

class Qu100 extends Qu{

public void get(Kehu k){

if(k.getyue()-100<0)

System.out.println("余额不足!!!");

else

{

k.setyue(k.getyue()-100);

System.out.println("取款成功");

}

}

}

class Qu500 extends Qu {

public void get(Kehu k){

if(k.getyue()-500<0)

System.out.println("余额不足!!!");

else

{

k.setyue(k.getyue()-500);

System.out.println("取款成功");

}

}

}

class Qu1500 extends Qu{

public void get(Kehu k){

if(k.getyue()-1500<0)

System.out.println("余额不足!!!");

else

{

k.setyue(k.getyue()-1500);

System.out.println("取款成功");

}

}

}

class Qu2000 extends Qu{

public void get(Kehu k){

if(k.getyue()-2000<0)

System.out.println("余额不足!!!");

else

{

k.setyue(k.getyue()-2000);

System.out.println("取款成功");

}

}

}

class Qu5000 extends Qu{

public void get(Kehu k){

if(k.getyue()-5000<0)

System.out.println("余额不足!!!");

else

{

k.setyue(k.getyue()-5000);

System.out.println("取款成功");

}

}

}

class Qu00 extends Qu{

public void get(Kehu k){

System.out.println("输入要取得金额");

Scanner s=new Scanner(System.in);

int n=s.nextInt();

if(k.getyue()-n<0)

System.out.println("余额不足!!!");

else

{

k.setyue(k.getyue()-n);

System.out.println("取款成功");

}

}

}

·结果

 

原文地址:https://www.cnblogs.com/wf1647790534/p/6074613.html