首页 > 代码库 > Java课堂练习——多态
Java课堂练习——多态
一.ATM机
import java.util.Scanner;
abstract class drawmoney{
public abstract double getMoney(double a,double n);
}
class drawmoney100 extends drawmoney{
public double getMoney(double a,double n){
if(a<100){
System.out.println("余额不足,请选择其他业务");
return a;
}
else {
System.out.println("已吐出100元");
return a-=100;
}
}
}
class drawmoney500 extends drawmoney{
public double getMoney(double a,double n){
if(a<500){
System.out.println("余额不足,请选择其他业务");
return a;
}
else {
System.out.println("已吐出500元");
return a-=500;
}
}
}
class drawmoney1000 extends drawmoney{
public double getMoney(double a,double n){
if(a<1000){
System.out.println("余额不足,请选择其他业务");
return a;
}
else {
System.out.println("已吐出1000元");
return a-=1000;
}
}
}
class drawmoney1500 extends drawmoney{
public double getMoney(double a,double n){
if(a<1500){
System.out.println("余额不足,请选择其他业务");
return a;
}
else {
System.out.println("已吐出1000元");
return a-=1000;
}
}
}
class drawmoney2000 extends drawmoney{
public double getMoney(double a,double n){
if(a<2000){
System.out.println("余额不足,请选择其他业务");
return a;
}
else {
System.out.println("已吐2000元");
return a-=2000;
}
}
}
class drawmoney5000 extends drawmoney{
public double getMoney(double a,double n){
if(a<5000){
System.out.println("余额不足,请选择其他业务");
return a;
}
else {
System.out.println("已吐出5000元");
return a-=5000;
}
}
}
class drawmoneyn extends drawmoney{
public double getMoney(double a,double n){
if(a<n){
System.out.println("余额不足,请选择其他业务");
return a;
}
else {
System.out.println("已吐出"+n+"元");
return a-=n;
}
}
}
class Account{
String account;
String usename;
int password;
String date;
double balance;
int Operation;
public Account(){
account="accout1805231593";
usename="宋家林";
password=521114;
date="1997.8.11";
balance=230.15;
Operation=0;
}
public Account(String a,String b,int c,String d,double e,int f){
account=a;
usename=b;
password=c;
date=d;
balance=e;
Operation=f;
}
}
public class ATM {
public Account h=new Account();
}
public boolean shurumina(int a){
if(a==h.password) {
System.out.println("密码正确");
}
else{
System.out.println("密码错误,请重新输入");
return false;
}
public void jiemian(boolean a){
Scanner cin=new Scanner(System.in);
while(a){
System.out.println("1.存款");
System.out.println("2.取款");
System.out.println("3.转账汇款");
System.out.println("4.修改密码");
System.out.println("5.查询余额");
System.out.println("6.退卡");
int b=cin.nextInt();
switch (b){
case 1:deposit(b);break;
case 2:withdrawals(b);break;
case 3:transfer(b);break;
case 4:Passwordservice(b);break;
case 5:System.out.println(h.balance);break;
case 6:a=false;break;
}
}
}
public int withdrawals(int a){
Scanner cin=new Scanner(System.in);
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.返回");
int b=cin.nextInt();
double c=0;
drawmoney m=null;
switch (b){
case 1:m= new drawmoney100();m.getMoney(h.balance, b);break;
case 2:m= new drawmoney500();m.getMoney(h.balance, b);break;
case 3:m= new drawmoney1000();m.getMoney(h.balance, b);break;
case 4:m= new drawmoney1500();m.getMoney(h.balance, b);break;
case 5:m= new drawmoney2000();m.getMoney(h.balance, b);break;
case 6:m= new drawmoney5000();m.getMoney(h.balance, b);break;
case 7:{
System.out.println("输入金额");
c=cin.nextDouble();
m= new drawmoneyn();
m.getMoney(h.balance, c);break;
}
case 8: return a;}
return a;
}
public int deposit(int a){
System.out.println("放入人民币");
System.out.println("输入金额");
Scanner cin=new Scanner(System.in);
int b=cin.nextInt();
h.balance+=b;
System.out.println("已成功");
jiemian(true);
return a;
}
public int transfer(int a){
System.out.println("请输入银行账号");
Scanner cin=new Scanner(System.in);
String b=cin.next();
System.out.println("输入转账的金额");
int c=cin.nextInt();
h.balance-=c;
System.out.println("已成功");
jiemian(true);
return 0;
}
public int Passwordservice(int a){
System.out.println("请输入新密码");
Scanner cin=new Scanner(System.in);
int b=cin.nextInt();
h.password-=b;
System.out.println("已成功");
return 0;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ATM mm=new ATM();
String out=new String();
out+="请插入银行卡";
System.out.println(out);
System.out.println("已成功");
out+="请输入密码";
System.out.println(out);
Scanner cin=new Scanner(System.in);
int a=cin.nextInt();
while (!mm.shurumina(a)){
a=cin.nextInt();
}
mm.jiemian(true);
}
}
二.
1.左边的程序运行结果是什么?
2. 计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪些语法特性?
当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。
这个特性实际上就是面向对象“多态”特性的具体表现。
如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
如果子类被当作父类使用,则通过子类访问的字段是父类的!
牢记:在实际开发中,要避免在子类中定义与父类同名 的字段。不要自找麻烦!——但考试除外,考试 中出这种题还是可以的。
三.
可以使用instanceof运算符判断一个对象是否可以转换为指定的类型:
Object obj="Hello";if(obj instanceof String)
System.out.println("obj对象可以被转换为字符串");
程序代码:public class TestInstanceof {
public static void main(String[] args)
{
//声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类
//但hello变量的实际类型是String
Object hello = "Hello";
//String是Object类的子类,所以返回true。
System.out.println("字符串是否是Object类的实例:" + (hello instanceof Object));
//返回true。
System.out.println("字符串是否是String类的实例:" + (hello instanceof String));
//返回false。
System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));
//String实现了Comparable接口,所以返回true。
System.out.println("字符串是否是Comparable接口的实例:" + (hello instanceof Comparable));
String a = "Hello";
//String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过
//System.out.println("字符串是否是Math类的实例:" + (a instanceof Math));
}
}
四.为什么要用多态?它有什么好处?
使用多态最大的好处是:当你要修改程序并扩充系统时,你需要修改的地方较少,对其它部分代码的影响较小!千万不要小看这两个“较”字!程序规模越大,其优势就越突出。
Java课堂练习——多态