java多态课后作业

1子类和父类定义了一模一样的方法

java多态课后作业

java多态课后作业

·结果是100200200200201

·父类调用了子类的方法,但是方法中调用的变量是子类的变量

·自我总结:子类中的方法,如果调用同名变量,则调用的是子类的。

总结:

·当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

·这个特性实际上就是面向对象“多态”特性的具体表现。

·如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用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("我要减肥,所以每天只吃一点大米。");

}

}

·结果

   
 

java多态课后作业

     

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:

{

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgfyd.html