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.取款 2.存款 3.转账汇款 4.修改密码 5.查询余额 "); int choose2 = sca.nextInt(); while(choose != -1) { if(choose2 == 1) { System.out.println("请选择取款金额:"); System.out.println("1.100 2.500 3.1000 4.1500 5.2000 6.5000 7.其他金额 8.退卡"); 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.取款 2.存款 3.转账汇款 4.修改密码 5.查询余额 "); choose2 = sca.nextInt(); } else if(choose2 == 2) { System.out.println("请输入存的金额:"); double cun = sca.nextDouble(); user.setYu(user.getYu() + cun); System.out.print("请选择要操作的选项:1.取款 2.存款 3.转账汇款 4.修改密码 5.查询余额 "); 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.取款 2.存款 3.转账汇款 4.修改密码 5.查询余额 "); choose2 = sca.nextInt(); } else if(choose2 == 4) { System.out.println("请输入新的密码:"); int newmima = sca.nextInt(); user.setmima(newmima); System.out.print("请选择要操作的选项:1.取款 2.存款 3.转账汇款 4.修改密码 5.查询余额 "); choose2 = sca.nextInt(); } else if(choose2 == 5) { System.out.println("当前余额:" + user.getYu()); System.out.print("请选择要操作的选项:1.取款 2.存款 3.转账汇款 4.修改密码 5.查询余额 "); 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; } }
运行结果截图:
错误情况: