• Java课堂练习——多态


    一.ATM

    import java.util.Scanner;

    abstract class drawmoney{

    public abstract double getMoney(double a,double n);

    }

    class drawmoney100 extends drawmoney{

    public double getMoney(double a,double n){

    if(a<100){

    System.out.println("余额不足,请选择其他业务");

    return a;

    }

    else {

    System.out.println("已吐出100元");

    return a-=100;

    }

    }

    }

    class drawmoney500 extends drawmoney{

    public double getMoney(double a,double n){

    if(a<500){

    System.out.println("余额不足,请选择其他业务");

    return a;

    }

    else {

    System.out.println("已吐出500元");

    return a-=500;

    }

    }

    }

    class drawmoney1000 extends drawmoney{

    public double getMoney(double a,double n){

    if(a<1000){

    System.out.println("余额不足,请选择其他业务");

    return a;

    }

    else {

    System.out.println("已吐出1000元");

    return a-=1000;

    }

    }

    }

    class drawmoney1500 extends drawmoney{

    public double getMoney(double a,double n){

    if(a<1500){

    System.out.println("余额不足,请选择其他业务");

                return a;

            }

            else {

             System.out.println("已吐出1000元");

             return a-=1000;

            }

    }

    }

    class drawmoney2000 extends drawmoney{

    public double getMoney(double a,double n){

    if(a<2000){

    System.out.println("余额不足,请选择其他业务");

    return a;

    }

    else {

    System.out.println("已吐2000元");

    return a-=2000;

    }

    }

    }

    class drawmoney5000 extends drawmoney{

    public double getMoney(double a,double n){

    if(a<5000){

    System.out.println("余额不足,请选择其他业务");

    return a;

    }

    else {

    System.out.println("已吐出5000元");

    return a-=5000;

    }

    }

    }

    class drawmoneyn extends drawmoney{

    public double getMoney(double a,double n){

    if(a<n){

    System.out.println("余额不足,请选择其他业务");

    return a;

    }

    else {

    System.out.println("已吐出"+n+"元");

    return a-=n;

    }

    }

    }

    class Account{

    String account;

        String usename;

        int password;

        String date;

        double balance;

        int Operation;

        public Account(){

         account="accout1805231593";

         usename="宋家林";

            password=521114;

            date="1997.8.11";

            balance=230.15;

            Operation=0;

        }

        public Account(String a,String b,int c,String d,double e,int f){

         account=a;

         usename=b;

         password=c;

         date=d;

         balance=e;

         Operation=f;

        }

    }

     public class ATM {

     public Account h=new Account();

     }

     public boolean shurumina(int a){

     if(a==h.password) {

     System.out.println("密码正确");

     }

     else{

     System.out.println("密码错误,请重新输入");

     return false;

     }

    public void jiemian(boolean a){

    Scanner cin=new Scanner(System.in);

    while(a){

    System.out.println("1.存款");

    System.out.println("2.取款");

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

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

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

    System.out.println("6.退卡");

    int b=cin.nextInt();

    switch (b){

    case 1:deposit(b);break;

    case 2:withdrawals(b);break;

    case 3:transfer(b);break;

    case 4:Passwordservice(b);break;

    case 5:System.out.println(h.balance);break;

    case 6:a=false;break;

    }

    }                      

     }

    public int withdrawals(int a){

    Scanner cin=new Scanner(System.in);

    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.返回");

    int b=cin.nextInt();

    double c=0;

    drawmoney m=null;

    switch (b){

    case 1:m= new drawmoney100();m.getMoney(h.balance, b);break;

    case 2:m= new drawmoney500();m.getMoney(h.balance, b);break;

    case 3:m= new drawmoney1000();m.getMoney(h.balance, b);break;

    case 4:m= new drawmoney1500();m.getMoney(h.balance, b);break;

    case 5:m= new drawmoney2000();m.getMoney(h.balance, b);break;

    case 6:m= new drawmoney5000();m.getMoney(h.balance, b);break;

    case 7:{

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

    c=cin.nextDouble();

    m= new drawmoneyn();

    m.getMoney(h.balance, c);break;

    }

    case 8: return a;}

                    return a;

             }

            public int deposit(int a){

             System.out.println("放入人民币");

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

             Scanner cin=new Scanner(System.in);

             int b=cin.nextInt();

             h.balance+=b;

             System.out.println("已成功");

             jiemian(true);

             return a;

             }

            public int transfer(int a){

             System.out.println("请输入银行账号");

             Scanner cin=new Scanner(System.in);

             String b=cin.next();

             System.out.println("输入转账的金额");

             int c=cin.nextInt();

             h.balance-=c;

             System.out.println("已成功");

             jiemian(true);

             return 0;

            }

            public int Passwordservice(int a){

             System.out.println("请输入新密码");

             Scanner cin=new Scanner(System.in);

             int b=cin.nextInt();

             h.password-=b;

             System.out.println("已成功");

             return 0;

            }

            public static void main(String[] args) {

             // TODO Auto-generated method stub

             ATM mm=new ATM();

             String out=new String();

             out+="请插入银行卡";

             System.out.println(out);

             System.out.println("已成功");

             out+="请输入密码";

             System.out.println(out);

             Scanner cin=new Scanner(System.in);

             int a=cin.nextInt();

             while (!mm.shurumina(a)){

             a=cin.nextInt();

             }

             mm.jiemian(true);

             }

    }

    二.

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

     

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

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

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

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

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

    牢记:在实际开发中,要避免在子类中定义与父类同名 的字段。不要自找麻烦!——但考试除外,考试 中出这种题还是可以的。

    .

    可以使用instanceof运算符判断一个对象是否可以转换为指定的类型:

    Object obj="Hello";if(obj instanceof String)

    System.out.println("obj对象可以被转换为字符串");

    程序代码:public class TestInstanceof {

    public static void main(String[] args)

    {

    //声明hello时使用Object类,则hello的编译类型是ObjectObject是所有类的父类

    //hello变量的实际类型是String

    Object hello = "Hello";

    //StringObject类的子类,所以返回true

    System.out.println("字符串是否是Object类的实例:" + (hello instanceof Object));

    //返回true

    System.out.println("字符串是否是String类的实例:" + (hello instanceof String));

    //返回false

    System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));

    //String实现了Comparable接口,所以返回true

    System.out.println("字符串是否是Comparable接口的实例:" + (hello instanceof Comparable));

    String a = "Hello";

    //String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过

    //System.out.println("字符串是否是Math类的实例:" + (a instanceof Math));

    }

    }

    .为什么要用多态?它有什么好处?
    使用多态最大的好处是:当你要修改程序并扩充系统时,你需要修改的地方较少,对其它部分代码的影响较小!千万不要小看这两个字!程序规模越大,其优势就越突出。

  • 相关阅读:
    C#写文本文件,如何换行(添加换行符)
    C#使用oledb操作excel文件的方法
    winform之combobox
    vs2010快捷键
    可以下载一些书籍代码的网站
    对php和java里面的static函数和static的一些理解
    10.4-CMake find 模块
    6.25-Git 技巧
    6.4-Git Command
    2.25-CMake Tutorial
  • 原文地址:https://www.cnblogs.com/qq1499632156/p/6079328.html
Copyright © 2020-2023  润新知