zoukankan      html  css  js  c++  java
  • Java(多态)动手动脑

    1>

    请看以下“变态”的类(参看示例ParentChildTest.java)

    上述代码的特点是: 子类和父类定义了一模一样的字段和方法

    运行以下测试代码

    1. 上边的程序运行结果是什么?

    2. 你如何解释会得到这样的输出?

    第一个100:是parent调用PrintValue方法输出parent类中myValue值为100;

    第二个200:是child调用PrintValue方法输出child类中myValue值为200;

    第三个200:是parent = child,将子类对象的赋值给父类,但此时parent只能调用子类的方法,调用子类PrintValue时,输出的当然是子类的myValue值200。

    第四个200:虽然parent = child,但parent不能调用子类的变量,所以parent.myValue++;只是将父类对象中的变量myValue值+1但不能改变子类的myValue值,但调用的是子类PrintValue方法时,输出的是子类的myValue值200。

    第五个201:(Child)parent,强制转化parent为child对象,此时parent完全成为child对象,所以输出值为201。

    3. 计算机是不会出错的,之所以得到这样的运行结果也是有原因的, 那么从这些运行结果中,你能总 结出Java的哪些语法特性?

    (1):当子类和父类拥有同名方法时,并且让一个父类变量引用一个子类对象时,调用哪个方法由自己的真实类型来决定。

    (2):如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。

    2>

    用多态的方法模拟ATM操作流程。

    import java.util.Scanner;
    abstract class atma{
        public abstract void QuKuan();
        public abstract void CunKuan();
        public abstract void ZhuanZhang();
        public abstract void updataMima(String str);
        public abstract void showMoney();
    }
    public class ATM {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Account A = new Account();
            A.display();
        }
    
    }
    class Account extends atma
    {
        String account;
        String name;
        String data;
        int leixing;
        String mima;
        double money;
        Account(){}
        Account(String account,String name,String data,String mima,double money)
        {
            this.account = account;
            this.name = name;
            this.data = data;
            this.mima = mima;
            this.money = money;
        }
        public String getMima()
        {
            return mima;
        }
        
        public void Mune()
        {
            System.out.println("1.取款");
            System.out.println("2.存款");
            System.out.println("3.转账汇款");
            System.out.println("4.修改密码");
            System.out.println("5.查询余额");
            System.out.println("6.退卡");
        }
        public void QuKuan()
        {
            System.out.println("100元");
            System.out.println("500元");
            System.out.println("1000元");
            System.out.println("1500元");
            System.out.println("2000元");
            System.out.println("5000元");
            System.out.println("其他金额");
            System.out.println("返回");
            Scanner in = new Scanner(System.in);
            System.out.println("请输入取款金额:");
            int M = in.nextInt();
            if(M <= money)
            {
                System.out.println("正在取款请稍后。。。");
                money = money - M;
                System.out.println("取款成功!");
            }
            else
            {
                System.out.println("余额不足,取款失败!");
            }
        }
        public void CunKuan()
        {
            Scanner in = new Scanner(System.in);
            System.out.println("请输入存款金额:");
            int M = in.nextInt();
            money = money + M;
            System.out.println("存款成功!");
        }
        public void ZhuanZhang()
        {
            Scanner in = new Scanner(System.in);
            System.out.println("请输入转账行号:");
            String H = in.next();
            System.out.println("你要转账的人的姓名是否为xxx?0:是,1:否");
            int X=in.nextInt();
            if(X==0)
            {
                System.out.println("请输入转账金额:");
                int M = in.nextInt();
                if(money >= M)
                {
                    System.out.println("转账成功!");
                    money = money - M;
                }
                else
                {
                    System.out.println("余额不足,转账失败!");
                }
            }
            if(X==1)
            {
                System.out.println("卡号错误!");
            }
        }
        public void updataMima(String str)
        {
            if(str.equals(mima))
            {
                System.out.println("新密码不得与旧密码重复!");
            }
            else
            {
                mima = str;
                System.out.println("修改成功!");
            }
        }
        public void showMoney()
        {
            System.out.println("您的账户余额为:"+money);
        }
        public void display()
        {
            Scanner in = new Scanner(System.in);
            Account[] a = new Account[100];
            a[0] = new Account("123456789101","ctt","2016/11/15","123456",1000);
            System.out.println( "请输入密码:" );
            String input = in.next();
            boolean flag = false;
            for(int i  = 0;i<50;i++)
            {
                if(a[i].getMima().equals(input)&& a[i]!=null)
                    flag = true;
                break;
            }
            int s1;
            if(flag)
            {
                boolean p = true;
                while(p)
                {
                Mune();
                System.out.println( "请输入要执行的操作:" );
                s1 = in.nextInt();
                if(s1 == 1)
                {
                    QuKuan();
                    continue;
                }
                if(s1 == 2)
                {
                    CunKuan();
                    continue;
                }
                if(s1 == 3)
                {
                    ZhuanZhang();
                    continue;
                }
                if(s1 == 4)
                {
                    System.out.println("请输入新密码:");
                    String str = in.next();
                    updataMima(str);
                    continue;
                }
                if(s1 == 5)
                {
                    showMoney();
                    continue;
                }
                else
                {
                    p = false;
                    System.out.println("已退出!");
                }
            }
            }
            
            else
            {
                System.out.println("输入错误!");
            }
        }
    }

    结果:

    分析:利用抽象类实现。

  • 相关阅读:
    科学开源项目 : 建立一个 新的 光衍射 模型
    光不是电磁波 摩擦力不是电磁力
    收录一篇 贝尔不等式 的 文章
    数学家 程序员 哲学家 艺术家
    论 数学 的 工具性
    数学 怎么用?
    随便说说 广义相对论 的 时间膨胀
    逻辑物理学 : 光子 有 质量 吗 ?
    我对 “光子有质量 , 引力对光子有作用” 存疑
    收录一些 高等数学 的 文章
  • 原文地址:https://www.cnblogs.com/ttzz/p/6077038.html
Copyright © 2011-2022 走看看