java多态课后作业
Posted 发酸的丶米饭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多态课后作业相关的知识,希望对你有一定的参考价值。
一、验证
(1)子类和父类定义了一模一样的方法
·结果是100、200、200、200、201
·父类调用了子类的方法,但是方法中调用的变量是子类的变量
·自我总结:子类中的方法,如果调用同名变量,则调用的是子类的。
总结:
·当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。
·这个特性实际上就是面向对象“多态”特性的具体表现。
·如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
·如果子类被当作父类使用,则通过子类访问的字段是父类的!
二、动手动脑
(1)动物园中的一个开发场景:某动物园有一饲养员小李,每天需要给他所负责饲养的狮子、猴子和鸽子喂食。请用一个程序来模拟他喂食的过程。(使用接口代替抽象基类)
·源代码
import java.util.Vector;
public class Zoo
{
public static void main(String[] args)
{
Feeder f = new Feeder("小李");
Vector<Animal> ans = new Vector<Animal>();
//饲养员小李喂养一只狮子
ans.add(new Lion());
//饲养员小李喂养十只猴子
for (int i = 0; i < 10; i++) {
ans.add(new Monkey());
}
//饲养员小李喂养5只鸽子
for (int i = 0; i < 5; i++) {
ans.add(new Pigeon());
}
f.feedAnimals(ans);
}
}
class Feeder
{
public String name;
Feeder(String name)
{
this.name = name;
}
public void feedAnimals(Vector<Animal> ans)
{
for (Animal an : ans) {
an.eat();
}
}
}
interface Animal
{
public abstract void eat();
}
class Lion implements Animal
{
public void eat()
{
System.out.println("我不吃肉谁敢吃肉!");
}
}
class Monkey implements Animal
{
public void eat()
{
System.out.println("我什么都吃,尤其喜欢香蕉。");
}
}
class Pigeon implements Animal
{
public void eat()
{
System.out.println("我要减肥,所以每天只吃一点大米。");
}
}
·结果
|
(2)多态实现ATM
·源代码
import java.util.Scanner;
import java.io.*;
public class Money{
static Kehu[] stu=new Kehu[100];
static int n=0;
static int j=0;
static boolean state=true;
static Scanner str=new Scanner(System.in);
public static void main( String args[])
{//姓名,账户,密码,日期,余额
stu[0]=new Kehu("王帆","wf","wfs","20161115",10000);
stu[1]=new Kehu("志浩","wf","wfs","20161115",10000);
n=2;
boolean state=true;
System.out.println("输入登陆密码 ");
String mima=str.next();
int q;
for(q=0;q<n;q++)
{
if(mima.equals(stu[q].getmima()))
{
j=q;
System.out.println("登陆成功!");
break;
}
}
if(q==n)
{System.out.println("用户输入错误密码,则提示该卡已被锁定,无法操作!");state=false;}
while(state)
{
/*System.out.println("输入登陆账号密码 ");
for(int i=0;i<n;i++)
{
if(str.next().equals(stu[i].getnum()))
if(str.next().equals(stu[i].getmima())){
j=i;
System.out.println("登陆成功!");}
else
System.out.println("失败!");
break;
}*/
menu();
switch(str.nextInt()){
case 1:
{
System.out.println("1.100元 2.500元3. 1500元4. 2000元 5.5000元 6.其他");
int num=str.nextInt();
if(num==1)
{Qu s=new Qu100();s.get(stu[j]);break;}
else if(num==2)
{Qu s=new Qu500();s.get(stu[j]);break;}
else if(num==3)
{Qu s=new Qu1500();s.get(stu[j]);break;}
else if(num==4)
{Qu s=new Qu2000();s.get(stu[j]);break;}
else if(num==5)
{Qu s=new Qu5000();s.get(stu[j]);break;}
else if(num==6)
{
Qu s=new Qu00();s.get(stu[j]);
break;
}
}
case 2:
{
System.out.println("输入要存款");
cun(str.nextInt(),stu[j]);
break;
}
case 3:
{
System.out.println("输入转账行号姓名");
String na=str.next();
for(int i=0;i<n;i++)
{
if(stu[i].getname().equals(na))
{
System.out.println("输入要转款 ");
int qu=str.nextInt();
zhuan(qu,stu[j]);
break;
}
if(i==n)
{System.out.println("失败! ");break;}
}
break;
}
case 4:
{
System.out.println("输入要修改的密码 ");
update(stu[j],str.next());
break;
}
case 5:
{
cha(stu[j]);
break;
}
case 6:
{
System.out.println("已退出! ");
state=false;
break;
}
default:
{
System.out.println("输入指令有错误!请重新输入! ");
break;
}
}
}
}
public static void menu()
{
System.out.println("********************");
System.out.println("石家庄铁道大学软件工程系学生ATM管理系统");
System.out.println("********************");
System.out.println("1、 取款");
System.out.println("2、 存款");
System.out.println("3、 转账汇款");
System.out.println("4、 修改密码");
System.out.println("5、 查询余额");
System.out.println("6、退出");
System.out.println("********************");
}
public static void cun(int cun,Kehu k)
{
System.out.println(k.getname()+"的余额为:"+(k.getyue()+cun));
k.setyue(k.getyue()+cun);
}
public static void zhuan(int zhuan,Kehu k)
{
if(k.getyue()-zhuan<0)
System.out.println("余额不足!");
else
{
System.out.println("转账成功,余额为:"+(k.getyue()-zhuan));
k.setyue(k.getyue()-zhuan);
}
}
public static void cha(Kehu k)
{
System.out.println("余额为:"+k.getyue());
}
public static void update(Kehu k,String mima)
{
k.setmima(mima);
}
}
class Kehu
{
private String name;
private String num;
private String date;
private String mima;
private int yue;
public Kehu(String na,String nu,String s,String sc,int y)
{//姓名,账户,密码,日期,余额
num=nu;
name=na;
date=sc;
mima=s;
yue=y;
}
public void setname(String n)
{
name=n;
}
public void setnum(String n)
{
num=n;
}
public void setmima(String n)
{
mima=n;
}
public void setdate(String n)
{
date=n;
}
public void setyue(int n)
{
yue=n;
}
public int getyue()
{
return yue;
}
public String getnum()
{
return num;
}
public String getname()
{
return name;
}
public String getdate()
{
return date;
}
public String getmima()
{
return mima;
}
}
class Qu
{
public void get(Kehu k){}
}
class Qu100 extends Qu{
public void get(Kehu k){
if(k.getyue()-100<0)
System.out.println("余额不足!!!");
else
{
k.setyue(k.getyue()-100);
System.out.println("取款成功");
}
}
}
class Qu500 extends Qu {
public void get(Kehu k){
if(k.getyue()-500<0)
System.out.println("余额不足!!!");
else
{
k.setyue(k.getyue()-500);
System.out.println("取款成功");
}
}
}
class Qu1500 extends Qu{
public void get(Kehu k){
if(k.getyue()-1500<0)
System.out.println("余额不足!!!");
else
{
k.setyue(k.getyue()-1500);
System.out.println("取款成功");
}
}
}
class Qu2000 extends Qu{
public void get(Kehu k){
if(k.getyue()-2000<0)
System.out.println("余额不足!!!");
else
{
k.setyue(k.getyue()-2000);
System.out.println("取款成功");
}
}
}
class Qu5000 extends Qu{
public void get(Kehu k){
if(k.getyue()-5000<0)
System.out.println("余额不足!!!");
else
{
k.setyue(k.getyue()-5000);
System.out.println("取款成功");
}
}
}
class Qu00 extends Qu{
public void get(Kehu k){
System.out.println("输入要取得金额");
Scanner s=new Scanner(System.in);
int n=s.nextInt();
if(k.getyue()-n<0)
System.out.println("余额不足!!!");
else
{
k.setyue(k.getyue()-n);
System.out.println("取款成功");
}
}
}
·结果
以上是关于java多态课后作业的主要内容,如果未能解决你的问题,请参考以下文章