zoukankan      html  css  js  c++  java
  • 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("取款成功");

    }

    }

    }

    ·结果

     

  • 相关阅读:
    Java方法_数组
    Java语句
    C#死锁示例
    Sqlserver限制用户访问指定数据库
    Stream 和 byte[] 之间的转换
    ContentType
    IIS7多站点ssl配置及http自动跳转到https
    google map api key配置
    remote: Incorrect username or password ( access token ) fatal: Authentication failed for
    IIS 404设置
  • 原文地址:https://www.cnblogs.com/wf1647790534/p/6074613.html
Copyright © 2011-2022 走看看