首页 > 代码库 > 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.多态