• 多态(动手动脑)


    1、可以使用instanceof运算符判断一个对象是否可以转换为指定的类型:
      Object obj="Hello";
      if(obj instanceof String)
      System.out.println("obj对象可以被转换为字符串");

    程序代码:

    package demo;

    public class TestInstanceof {
     public static void main(String[] args){
      Object hello="Hello";
      System.out.println("字符串是否是Object类的实例:"+(hello instanceof Object));
      System.out.println("字符串是否是String类的实例:"+(hello instanceof String));
      System.out.println("字符串是否是Math类的实例:"+(hello instanceof Math));
      System.out.println("字符串是否是Comparable的实例:"+(hello instanceof Comparable));
      
      //String a="Hello";
      //System.out.println("字符串是否是Math类的实例:"+(a instanceof Math));
     }

    }

    程序截图:

    2、运行以下测试代码:

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

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

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

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

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

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

    程序代码:
      

    package demo;

    import java.util.Date;
    import java.util.Scanner;

    public class ATMduotai {

     static Account user[] = new Account[10];
     static int dq = -1;
     static int n = 0;
     static Scanner scan = new Scanner(System.in);
     static char ch = 'y';
     static atmfun p;
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      user[n++] = new Account("1001","liming","123456",20000.0);
      user[n++] =  new Account("1002","liSi","456",10000.0);
      int b;
      String id,passwd;
      boolean signin = false;
      System.out.println("请输入账户名:");
      id = scan.next();
      //登录操作
      for(int i = 0;i < n;i++){
       p = user[i];
       if(p.getId().equals(id))
       {
        System.out.println("请输入密码:");
        passwd = scan.next();
        if(p.getPasswd().equals(passwd))
        {
         signin = true;
         dq = i;
         break;
        }
        else
        {
         System.out.println("密码输入错误!卡已被锁定,无法操作");
         System.exit(0);
        }
        break;
       }
      }
      if(!signin)
      {
       System.out.println("无此用户名!");
       System.exit(0);
      }
      //public ATMuser(String aid,String aname,String apasswd,double ayue){
      while(ch == 'y'){
       System.out.println("***********************ATM*************************");
       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("***************************************************");
       b = scan.nextInt();
       switch(b){
       case 1:
       {
        cunKuan();break;
       }
       case 2:
       {
        quKuan();break;
       }
       case 3:
       {
        zhuanZhang();break;
       }
       case 4:
       {
        xiuGaipw();break;
       }
       case 5:
       {
        chaXunyue();break;
       }
       case 6:
       {
        ch = 'n';
        break;
       }
       default:
        System.out.println("输入错误!");break;
       }
      }
     }
     
     static void cunKuan(){
      p = user[dq];
      double jine;
      System.out.println("请输入存款金额:");
      jine = scan.nextDouble();
      p.setYue(jine);
      p.setType("存款");
      p.setDate();
      System.out.println("时间:  " + p.getDate() + " 操作:" + p.getType());
      System.out.println("余额为: " + p.getYue());
     }
     
     static void quKuan(){
      p = user[dq];
      System.out.println("请选择取款金额:");
      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;
      b = scan.nextInt();
      double jine = 0;
      switch(b)
      {
      case 1:
       jine = 100;break;
      case 2:
       jine = 500;break;
      case 3:
       jine = 1000;break;
      case 4:
       jine = 1500;break;
      case 5:
       jine = 2000;break;
      case 6:
       jine = 5000;break;
      case 7:
      {
       System.out.println("请输入金额:");
       jine = scan.nextDouble();
       break;
      }
      case 8:
       ch = 'n';break;
      }
      if(b != 8)
      {
       if(p.getYue() < jine)
        System.out.println("余额不足!");
       else{
        p.setYue(-jine);
        p.setType("取款");
        p.setDate();
        System.out.println("时间:  " + p.getDate() + " 操作:" + p.getType());
        System.out.println("余额为: " + p.getYue());
       }
      }
     }

     static void zhuanZhang(){
     
      String duifang;
      int df = -1;
      System.out.println("请输入对方账户:");
      duifang = scan.next();
      boolean cunzai = false;
      for(int i = 0;i < n;i++){
       p = user[i];
       if(p.getId().equals(duifang))
       {
        df = i;
        cunzai = true;
        break;
       }
      }
      if(!cunzai)
      {
       System.out.println("无此用户名!");
      }
      else
      {
       p = user[dq];
       double jine;
       System.out.println("请输入转账金额:");
       jine = scan.nextDouble();
       if(p.getYue() >= jine)
       {
        p.setYue(-jine);
        p.setType("转出");
        p.setDate();
        System.out.println("时间:  " + p.getDate() + " 操作:" + p.getType());
        System.out.println("余额为: " + p.getYue());
        p = user[df];
        p.setYue(jine);
        p.setType("转入");
        p.setDate();
        System.out.println("转账成功");
       }
       else
        System.out.println("余额不足");
         
      }

     }
     
     static void xiuGaipw(){
      p = user[dq];
      String a;
      System.out.println("请输入新密码:");
      a = scan.next();
      p.setPasswd(a);
      p.setType("修改密码");
      p.setDate();
      System.out.println("时间:  " + p.getDate() + " 操作:" + p.getType());
     }
     
     static void chaXunyue(){
      p = user[dq];
      System.out.println("余额为: " + p.getYue());
      p.setType("查询余额");
      p.setDate();
      System.out.println("时间:  " + p.getDate() + " 操作:" + p.getType());
     }
    }

    interface atmfun {
     void setId(String id);
     void setName(String name);
     void setPasswd(String passwd);
     void setYue(double yue);
     void setDate();
     void setType(String type);
     
     String getId();
     String getName();
     String getPasswd();
     double getYue();
     Date getDate();
     String getType();
    }

    class Account implements atmfun{
     String id;
     String name;
     String passwd;
     double yue = 0;
     Date date;
     String type;
     
     public Account(String aid,String aname,String apasswd,double ayue){
      name = aname;
      id = aid;
      passwd = apasswd;
      yue = ayue;
      setDate();
      setType("添加用户");
     }
     
     
     public void setId(String id){
      this.id = id;
     }
     public void setYue(double yue){
      this.yue += yue;
     }
     
     public void setName(String name){
      this.name = name;
     }
     
     public void setPasswd(String passwd){
      this.passwd = passwd;
     }
     
     public void setType(String type){
      this.type = type;
     }
     
     public void setDate(){
      date = new Date();
     }
     
     public String getId(){
      return id;
     }
     
     public String getName(){
      return name;
     }
     
     public String getPasswd(){
      return passwd;
     }
     
      public double getYue(){
      return yue;
     }
     
     public String getType() {
      return type;
     }
     
     public Date getDate(){
      return date;
     }
     
    }

    程序截图:


     

  • 相关阅读:
    使用 Istio 进行 JWT 身份验证(充当 API 网关)
    DNS 私有域的选择:internal.xxx.com/lan.xxx.com 还是 xxx.local/xxx.srv?
    「Bug」K8s 节点的 IP 地址泄漏,导致 IP 被耗尽
    Linux网络学习笔记(二):域名解析(DNS)——以 CoreDNS 为例
    Linux 发行版的选用(服务器和个人桌面)
    「Bug」VMware 虚拟机的关机测试中,Ubuntu 明显比 CentOS 慢
    VMware vSphere :服务器虚拟化
    「Bug」ubuntu 使用国内 apt 源构建 docker 时提示 hash 不匹配
    留言板
    Idea 自定义快捷代码输入 如syso => System.out.println()
  • 原文地址:https://www.cnblogs.com/th1314/p/6078928.html
Copyright © 2020-2023  润新知