首页 > 代码库 > 8.多态

8.多态

知识点:

1.基类对象赋给子类对象必须执行类型转换:子类对象变量=(子类名)基类对象名

 技术分享

技术分享

2.Vector< >s 可以随时向数组s中加入或移除对象

*********************************************************************

一.运行代码,运行结果是什么?如何解释会得到这样的输出?从运行结果中能总结出java的哪些语法特性?

 答: parent.printvalue(),myvalue=http://www.mamicode.com/100child.printvalue(),myvalue=200child.printvalue(),myvalue=200child.printvalue(),myvalue=200child.printvalue(),myvalue=201

1当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,对象是子类型的就调用子类型的方法,对象是父类型的就调用父类型的方法。

2)当子类与父类拥有相同的字段,则子类会代替父类的字段,子类方法中访问的是子类中的字段,子类方法访问父类中被隐藏的同名字段可以使用super关键字。

二.用多态模拟ATM机

  源代码:package demo;

import java.util.Scanner;

public class Show {

public static void main(String[] args) {

       ATM atm=new ATM();

       Show s=new Show();

       s.showFace();

       atm.select();

     }

     //显示菜单方法

public static void showFace()

{

 System.out.println("********************");

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

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

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

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

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

System.out.println("********************");

System.out.println("请选择:");

}

}

class PersonalAccount

{

String account;

String name;

String date;  //日期

String mima; //密码

double yue;  //余额

PersonalAccount(String account,String name,String date,String mima,double yue){

this.account=account;

this.name=name;

this.date=date;

this.mima=mima;

this.yue=yue;

}

String Getaccount()

{

  return account;

  }

String Getname()

 {

   return name;

 }

 String Getdata()

{

  return date;

}

String Getmima()

{

 

 return mima;

}

 double Getyue()

 {

   return yue;

  }

void Setaccount(String ac)

{

  account=ac;

}

void Setname(String n)

{

   name=n;

}

void Setdate(String d)

{

   date=d;

}

void Setmima(String m)

{

  mima=m;

}

void Setyue(double y)

{

  yue=y;

}

}

abstract class aATM{

 public abstract void QuKuan();//取款

 public abstract void CunKuan();//存款

public abstract void Zhuanzhang();//转账

public abstract void mima();//改密码

public abstract void yue();//余额

}

class ATM extends aATM{

Scanner in = new Scanner(System.in);

PersonalAccount A=new PersonalAccount("1234567890123","han","20161115","970318",1000);

public void QuKuan()

{

System.out.println("可取款金额:");

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("请输入你要取款的金额:");

double Q=in.nextDouble();

if(A.yue-Q<0)

{

  System.out.println("余额不足!");

}

  else

{

  System.out.println("取款成功!");

   A.yue=A.yue-Q;

}

}

public void CunKuan()

{

System.out.println("请输入存款金额:");

double Q1=in.nextDouble();

A.yue=A.yue+Q1;

}

public void Zhuanzhang()

{

System.out.println("输入要转账的行号:");

String H=in.next();

System.out.println("你要转账的人的姓名是否为xxx?0:,1:");

int X=in.nextInt();

if(X==0)

{

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

double Z=in.nextDouble();

System.out.println("转账成功!");

 A.yue=A.yue-Z;

System.out.println("您的余额为:"+A.yue);

}

if(X==1)

{

  System.out.println("卡号错误!");

}

}

public void mima()

{

  System.out.println("请输入您要修改的卡号:");

  String S=in.next();

  if(A.Getaccount().equals(S))

{

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

 String S1=in.next();

 if(A.Getmima().equals(S1))

    {

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

     String S2=in.next();

     A.Setmima(S2);

     System.out.println("修改成功!");

    }

 }

  }

 public void yue()

 {

   System.out.println("余额为:"+A.yue);

 }

 void select()

 {

  boolean p=true;

  while(p == true)

 {

 Scanner in = new Scanner(System.in);

 System.out.println("请输入要执行的操作:");

 int m = in.nextInt();

 if(m == 1)

  {

    QuKuan();

   continue;

  }

 if(m == 2)

  {

CunKuan();

    continue;

  }

 if(m == 3)

 {

Zhuanzhang();

 continue;

 }

 if(m == 4)

 {

  mima();      

  continue;

  }

if(m == 5)

{

yue();

    continue;

    }

else

 {

System.out.println("已退出系统!");

p = false;

}

in.close();

}

  }

}

8.多态