多态

测试代码如下代码:

 

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;

}


结果截图:

原文地址:https://www.cnblogs.com/maosonglin/p/6079039.html