• 多态


    测试代码如下代码:

     

    public class ParentChildTest {

          public static void main(String[] args) {

                 Parent parent=new Parent();

                 parent.printValue();

                 Child child=new Child();

                 child.printValue();

                

                 parent=child;

                 parent.printValue();

                

                 parent.myValue++;

                 parent.printValue();

                

                 ((Child)parent).myValue++;

                 parent.printValue();

                

          }

    }

     

    class Parent{

          public int myValue=100;

          public void printValue() {

                 System.out.println("Parent.printValue(),myValue="+myValue);

          }

    }

    class Child extends Parent{

          public int myValue=200;

          public void printValue() {

                 System.out.println("Child.printValue(),myValue="+myValue);

          }

    }

     

    测试前猜测结果:

    我觉得应该输出以下内容:

    100

    200

    200

    201

    201

    结果却输出以下内容:

    Parent.printValue(),myValue=100

    Child.printValue(),myValue=200

    Child.printValue(),myValue=200

    Child.printValue(),myValue=200

    Child.printValue(),myValue=201

    让我意外的只有第三个结果,为什么会是200,在程序中,明明将子类对象赋给了父类的对象parent,parent的myvalue应该是200才对,为什么对他进行操作去没有改变他的值呢?

    原来parent虽然应用了子类的对象,但是parent.myvalue任然是父类的成员测试如下:

    Parent.printValue(),myValue=100

    Child.printValue(),myValue=200

    Child.printValue(),myValue=200

    parent.myValue = 101

    Child.printValue(),myValue=200

    Child.printValue(),myValue=201

     

     

    用多态方法模拟ATM自动取款机

    结果如下:

    import java.util.Vector;

    import java.io.*;

    public class ATM {

          public static void main(String[] args)throws IOException{

                 BufferedReader input = new BufferedReader(new

                               InputStreamReader(System.in));

                 Account account = new Account();

                 ATM atm = new ATM();

                 do{//输入银行卡密码,如果密码错误,则需要重新输入。

                        System.out.println("请输入您的银行卡或者输入银行账户");

                        String userid = input.readLine();

                        System.out.println("输入您的密码");

                        String userpassword = input.readLine();

                        account = atm.login(userid, userpassword);

                        if(account==null)

                               System.out.println("账户或密码错误");

                 }while(account == null);

                

                 boolean flag = true;

                 int option;

                 do{

                        BufferedReader input1 = new BufferedReader(new

                                      InputStreamReader(System.in));

                        System.out.println("1:取款      2:转账   3:查询   4:修改密码  5:退卡");

                        try{

                               String s = input1.readLine();

                               option = Integer.parseInt(s);

                        }catch(IOException e){

                               System.out.println("输入异常!");

                               e.printStackTrace();

                               option = 0;

                        }

                        if(option == 1){

                               account.withdrawl();

                        }else if(option == 2){

                               System.out.println("输入转入用户");

                               String userid = input1.readLine();

                               System.out.println("确认转入用户");

                               String userid2 = input1.readLine();

                               if(!userid.equals(userid2))

                                      System.out.println("两次输入用户不同");

                               //account.transfor(a, e)

                        }else if(option==3){

                               account.inquiry();

                        }else if(option==4){

                               account.motifyPin();

                        }else if(option==5){

                               flag = false;

                        }else

                               System.out.println("无此操作");

                              

                 }while(flag);

          }

         

          public ATM() {

                 // TODO Auto-generated constructor stub

                 accountGroup = new Vector<Account>();

                 accountGroup.add(new Account("100000000000",

                        "毛松林","1996/12/07","000000",(int)(Math.random()*100000)));

                 accountGroup.add(new Account("200000000000",

                               "张三","1996/4/8","111111",(int)(Math.random()*1000)));

          }

          public Account login(String userid,String password)           //确认账户

          {

                 for(Account a:accountGroup){

                        if(a.getID().equals(userid) && a.getPassword().equals(password))

                               return a;

                 }

                 return null;

          }

          private Vector<Account> accountGroup;

    }


    结果截图:

  • 相关阅读:
    数据库中 dbo是什么意思
    常用的设计模式 介绍
    ReferenceEquals和 == 和equals()的比较
    IOC 控制反转模式
    集群和负载均衡
    数据库 读写分离
    C# 中using的几个用途
    WCF ABC
    SQL Server数据库性能优化(三)之 硬件瓶颈分析
    SQL Server数据库性能优化(二)之 索引优化
  • 原文地址:https://www.cnblogs.com/maosonglin/p/6079039.html
Copyright © 2020-2023  润新知