多态---课后作业
1.运行结果:

2.在程序中,前两组定义自己的变量,用自己的方法及成员变量;第三个parent=child,引用子类的方法及变量,第四个变量是父类的,方法是子类的,最后一个是强制转化,改变的是子类的变量,用的是子类的方法。
3.通过自己反复改变ParentChildTest.java中的代码,和结论一致
A)当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。
B)如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
C)如果子类被当作父类使用,则通过子类访问的字段是父类的!
用多态的方法模拟ATM操作流程。
源代码:
import java.util.Scanner;
public class Atm extends User{
public Atm(String num, String name, int date, int mima, char use, double yu) {
super(num, name, date, mima, use, yu);
}
public static void main(String[] args) {
User user = new Atm("12345678910","胡建峰",1111,000000,' ',100.0);
System.out.println("请选择使用语言:1.汉语,2.English");
Scanner sca = new Scanner(System.in);
int choose = sca.nextInt();
if(choose == 1)
{
System.out.print("请输入六位密码(初始密码为000000):");
int m = sca.nextInt();
if(m == user.getmima())
System.out.println("输入正确");
else
{
System.out.print("该卡已被锁定,无法操作!");
return;
}
}
System.out.print("请选择要操作的选项:1.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
int choose2 = sca.nextInt();
while(choose != -1)
{
if(choose2 == 1)
{
System.out.println("请选择取款金额:");
System.out.println("1.100\t2.500\t3.1000\t4.1500\t5.2000\t6.5000\t7.其他金额\t8.退卡");
int choose3 = sca.nextInt();
double y = user.getYu(), q;
double [] yy = {100, 500, 1000, 1500, 2000, 5000};
if(choose3 == 8)
return;
else if(choose3 == 7)
{
System.out.print("请输入要取的金额:");
q = sca.nextDouble();
}
else
q = yy[choose3 - 1];
if((y - q) < 0)
{
System.out.println("余额不足!");
}
else
{
user.setYu(y - q);
System.out.println("取款成功!");
}
System.out.print("请选择要操作的选项:1.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
choose2 = sca.nextInt();
}
else if(choose2 == 2)
{
System.out.println("请输入存的金额:");
double cun = sca.nextDouble();
user.setYu(user.getYu() + cun);
System.out.print("请选择要操作的选项:1.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
choose2 = sca.nextInt();
}
else if(choose2 == 3)
{
System.out.println("请输入转账的账户:");
String hu = sca.next();
System.out.println("输入转账金额:");
double zhua = sca.nextDouble();
System.out.println("转账成功!");
System.out.print("请选择要操作的选项:1.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
choose2 = sca.nextInt();
}
else if(choose2 == 4)
{
System.out.println("请输入新的密码:");
int newmima = sca.nextInt();
user.setmima(newmima);
System.out.print("请选择要操作的选项:1.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
choose2 = sca.nextInt();
}
else if(choose2 == 5)
{
System.out.println("当前余额:" + user.getYu());
System.out.print("请选择要操作的选项:1.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
choose2 = sca.nextInt();
}
else
{
System.out.println("输入有误!");
choose2 = sca.nextInt();
}
}
sca.close();
}
}
class User
{
String num;
String name;
int Date;
int mima;
char use;
double yu;
public User(String num, String name, int date, int mima, char use, double yu)
{
this.num = num;
this.name = name;
Date = date;
this.mima = mima;
this.use = use;
this.yu = yu;
}
public double getYu() {
return yu;
}
public void setYu(double yu) {
this.yu = yu;
}
public int getmima()
{
return mima;
}
public void setmima(int i) {
mima = i;
}
public void setuse(char c)
{
use = c;
}
public char getuse()
{
return use;
}
}
运行结果截图:


错误情况:


浙公网安备 33010602011771号