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

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类的实例:" + (helloinstanceof Object));

//返回true。

System.out.println("字符串是否是String类的实例:" + (helloinstanceof String));

//返回false。

System.out.println("字符串是否是Math类的实例:" + (helloinstanceof Math));

//String实现了Comparable接口,所以返回true。

System.out.println("字符串是否是Comparable接口的实例:" + (helloinstanceof Comparable));

String a = "Hello";

//String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过

//System.out.println("字符串是否是Math类的实例:" + (ainstanceof Math));

}

}

四.为什么要用多态?它有什么好处?

使用多态最大的好处是:当你要修改程序并扩充系统时,你需要修改的地方较少,对其它部分代码的影响较小!千万不要小看这两个“较”字!程序规模越大,其优势就越突出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值