运行以下代码:
回答问题
1. 左边的程序运行结果是什么?
2. 你如何解释会得到这样的输出?
3. 计算机是不会出错的,之所以得
到这样的运行结果也是有原因的,
那么从这些运行结果中,你能总
结出Java的哪些语法特性?
请务必动脑总结,然后修改或编写一些代码进行测试,验证自己的想法,最后再看 后面的PPT给出的结论。
运行结果:
总结:
当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。
这个特性实际上就是面向对象“多态”特性的具体表现。
如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
如果子类被当作父类使用,则通过子类访问的字段是父类的!
牢记:在实际开发中,要避免在子类中定义与父类同名 的字段。不要自找麻烦!——但考试除外,考试 中出这种题还是可以的。
用多态的方法模拟ATM操作流程。
源代码:
import java.util.Scanner;
interface fangfa {
public void show();
public void qukuan();
public void cunkuan();
public void zhuanzhang();
public void setAcount(String string, String string2, String string3, String string4, double i);
public String getMima();
}
class atm implements fangfa {
String kahao;
String name;
String date;
double cun;
String mima;
public atm() {
}
public atm(String kahao, String name, String date, String mima, double cun) {
this.kahao = kahao;
this.name = name;
this.date = date;
this.mima = mima;
this.cun = cun;
}
public void setAcount(String kahao, String name, String date, String mima, double cun) {
this.kahao = kahao;
this.name = name;
this.date = date;
this.mima = mima;
this.cun = cun;
}
public String getkahao() {
return kahao;
}
public String getName() {
return name;
}
public String getDate() {
return date;
}
public String getMima() {
return mima;
}
public double getCun() {
return cun;
}
public void show() {
System.out.println("余额为:" + cun);
}
public void cunkuan() {
System.out.println("请输入存款金额:");
Scanner s = new Scanner(System.in);
cun += s.nextDouble();
show();
}
public void zhuanzhang() {
atm q = new atm();
Scanner s = new Scanner(System.in);
System.out.println("请输入对方卡号:");
q.kahao = s.nextLine();
System.out.println("请输入转账金额:");
double zhuan = s.nextDouble();
cun = cun - zhuan;
q.cun = q.cun + zhuan;
show();
}
public void qukuan() {
boolean f = true;
while (f) {
System.out.println("1、100元");
System.out.println("2、500元");
System.out.println("3、1000元");
System.out.println("4、1500元");
System.out.println("5、2000元");
System.out.println("6、5000元");
System.out.println("7、其他金额");
System.out.println("8、退卡");
System.out.println("9、返回");
System.out.println("请选择");
Scanner s = new Scanner(System.in);
int ch = s.nextInt();
switch (ch) {
case 1:
cun = cun - 100;
show();
break;
case 2:
cun = cun - 500;
show();
break;
case 3:
cun = cun - 1000;
show();
break;
case 4:
cun = cun - 1500;
show();
break;
case 5:
cun = cun - 2000;
show();
break;
case 6:
cun = cun - 5000;
show();
break;
case 7:
System.out.println("请输入取款金额:");
double qu = s.nextDouble();
cun = cun - qu;
show();
break;
case 8:
f = false;
break;
case 9:
f = false;
break;
}
}
}
}
public class Caozuo {
public static void main(String[] args) {
fangfa a = new atm();
a.setAcount("111111111111", "nasdf", "199508030048", "123456", 20000);
System.out.println("请输入密码:");
Scanner aa = new Scanner(System.in);
String ba = aa.nextLine();
if (ba.equals(a.getMima()))
while (true) {
System.out.println("1、取款");
System.out.println("2、存款");
System.out.println("3、转账");
System.out.println("4、查询");
System.out.println("请选择:");
Scanner s = new Scanner(System.in);
int b = s.nextInt();
switch (b) {
case 1:
a.qukuan();
break;
case 2:
a.cunkuan();
break;
case 3:
a.zhuanzhang();
break;
case 4:
a.show();
}
}
}
}
结果截图: