zoukankan      html  css  js  c++  java
  • 08多态

    程序运行结果是什么? 如何解释会得到这样的输出?

     

    当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。如果子类被当作父类使用,则通过子类访问的字段是父类的

     这种编程方式有什么不合理的地方吗?

    每一个动物都是分别写一次喂养程序,那么当被要求写多个动物时,将会有非常大的工作量

     动物园程序

    package wsd;
    
    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("我要减肥,所以每天只吃一点大米。");
            }
    }

    实验结果截图、

    import java.util.Scanner;
    interface fangfa{
    
    public void show();
    public void qukuan();
    public void cunkuan();
    public void zhuanzhang();
    public void setAcount(String string, String string2, String string3, String string4, double i);
    public String getMima();
    }
    class atm implements fangfa{
    String kahao; //私有变量
    String name;
    String riqi;
    double yue;
    String mima;
    
    public atm(){ //无参构造函数
    
    }
    public atm(String kahao,String name,String riqi,String mima,double yue){ //有参构造函数
    
    this.kahao=kahao;
    this.name=name;
    this.riqi=riqi;
    this.mima=mima;
    this.yue=yue;
    }
    
    public void setAcount(String kahao,String name,String riqi,String mima,double yue){ //赋值
    
    this.kahao=kahao;
    this.name=name;
    this.riqi=riqi;
    this.mima=mima;
    this.yue=yue;
    }
    public String getkahao(){ return kahao;}//获得值
    
    public String getName(){return name;}
    public String getRiqi(){return riqi;}
    public String getMima(){return mima;}
    public double getYue(){return yue;}
    
    public void show()
    {
    System.out.println("余额为:"+yue);
    }
    public void cunkuan(){
    System.out.println("请输入存款金额:");
    Scanner s=new Scanner(System.in);
    yue+=s.nextDouble();
    show();
    }
    
    public void zhuanzhang()
    {
    atm q=new atm();
    Scanner s=new Scanner(System.in);
    System.out.println("请输入对方卡号:");
    q.kahao=s.nextLine();
    System.out.println("请输入转账金额:");
    double zhuan=s.nextDouble();
    yue=yue-zhuan;
    q.yue=q.yue+zhuan;
    show();
    }
    public void qukuan(){
    boolean f=true;
    while(f){
    System.out.println("1、100元");
    System.out.println("2、500元");
    System.out.println("3、1000元");
    System.out.println("4、1500元");
    System.out.println("5、2000元");
    System.out.println("6、5000元");
    System.out.println("7、其他金额");
    System.out.println("8、退卡");
    System.out.println("9、返回");
    System.out.println("请选择");
    Scanner s=new Scanner(System.in);
    int ch=s.nextInt();
    switch(ch){
    case 1:
    yue=yue-100;
    show();
    break;
    case 2:
    yue=yue-500;
    show();
    break;
    case 3:
    yue=yue-1000;
    show();
    break;
    case 4:
    yue=yue-1500;
    show();
    break;
    case 5:
    yue=yue-2000;
    show();
    break;
    case 6:
    yue=yue-5000;
    show();
    break;
    case 7:
    System.out.println("请输入取款金额:");
    double qu=s.nextDouble();
    yue=yue-qu;
    show();
    break;
    case 8:
    f=false;
    break;
    case 9:
    f=false;
    break;
    
    }
    }
    }
    
    }
    public class Atmduotai {
    
    
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    
    fangfa a=new atm();
    a.setAcount("111111111111", "nasdf", "199508030048", "123456", 20000);
    System.out.println("请输入密码:");
    Scanner aa=new Scanner(System.in);
    String ba=aa.nextLine();
    if(ba.equals(a.getMima()))
    
    while(true){
    
    System.out.println("1、取款");
    System.out.println("2、存款");
    System.out.println("3、转账");
    System.out.println("4、查询");
    System.out.println("请选择:");
    Scanner s=new Scanner(System.in);
    int b=s.nextInt();
    switch(b){
    case 1:
    a.qukuan();
    break;
    case 2:
    a.cunkuan();
    break;
    case 3:
    a.zhuanzhang();
    break;
    case 4:
    a.show();
    }
    }
    }
    }

    结果截图、

  • 相关阅读:
    到底什么时候该使用MQ?
    阿里巴巴开源项目 Druid 负责人温少访谈
    MYSQL外键的使用以及优缺点
    SpringMVC拦截器(资源和权限管理)
    SpringMVC访问静态资源
    设计模式读书笔记文档下载
    java提高篇(八)----详解内部类
    Storm:最火的流式处理框架
    vue 学习视频推荐 & 初始化项目流程
    页面布局练习
  • 原文地址:https://www.cnblogs.com/xhxdeblog/p/6077952.html
Copyright © 2011-2022 走看看