编程练习--多态

应用继承和多态的思想,编写动物类,成员方法是动物叫声。写三个具体的类(猫、狗、羊),它们都是动物类的子类,并重写父类的成员方法。编写测试类,随机产生三种具体动物,调用叫声这个方法。

程序参考运行效果如图所示:

任务

任务分析:

1. 定义一个父类Animal类

属性:kind(种类)

方法:创建带参(kind为参数)构造方法

​ 创建cry():void方法

2. 编写三个具体的子类Cat类、Dog类、Sheep类

分别重写父类中的 cry() 方法,输出信息分别为

Cat类:小猫的叫声:喵喵喵

1
2

Dog类:小狗的叫声:汪汪汪

Sheep类:小羊的叫声:咩咩咩~

3. 编写测试类,首先生成长度为5的父类对象数组,然后通过循环依次向数组中存入数据,现设定存储规则为:

a) 每次随机产生一个0~2的正整数

b) 若数值为 0,则生成一个 Cat 类的对象,存入数组

c) 若数值为 1,则生成一个 Dog 类的对象,存入数组

d) 若数值为 2,则生成一个 Sheep 类的对象,存入数组

最后循环输出数组成员,并分别调用 cry() 方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package me.feihong.catdog;

public class Cat extends Animal{
public Cat() {

}

public Cat(String kind) {
super(kind);
}

//重写父类cry()方法,输出信息为“小猫的叫声:喵喵喵~~~”
@Override
public void cry() {
System.out.println(getKind()+"小猫的叫声:喵喵喵~~~");
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package me.feihong.catdog;

public class Dog extends Animal{
public Dog() {

}

public Dog(String kind) {
super(kind);
}

//重写父类cry()方法:输出信息为“小狗的叫声:汪汪汪~~~”
@Override
public void cry() {
System.out.println(getKind()+"小狗的叫声:汪汪汪~~~");
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package me.feihong.catdog;

public class sheep extends Animal{
public sheep() {

}

public sheep(String kind) {
super(kind);
}

//重写父类的方法cry(),要求输出信息“小羊的叫声:咩咩咩~~~”
@Override
public void cry() {
System.out.println(getKind()+"小羊的叫声:咩咩咩~~~");
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package me.feihong.catdog;

public class Animal {
//属性:kind(种类)
private String kind;

public Animal() {

}
//创建带参(kind为参数)构造函数
public Animal(String kind) {
this.setKind(kind);
}

//应用封装实现对私有属性的get/set操作
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}

//创建成员方法cry():void
public void cry() {
System.out.println("动物会叫~~~");
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package me.feihong.test;

import me.feihong.catdog.*;

public class Test {

public static void main(String[] args) {
//生成父类对象数组,数组长度为5
Animal animal[]=new Animal[5];

//产生随机数,随机产生三种具体子类的实例
for(int i=0;i<5;i++) {
int temp=(int)(Math.random()*3);
if(temp==0) {
animal[i]=new Cat("Cat类:");
}else if(temp==1) {
animal[i]=new Dog("Dog类:");
}else if(temp==2){
animal[i]=new sheep("Sheep类:");
}
}

//循环输出,循环体中每个对象分别调用cry()方法。
for(int i=0;i<3;i++) {
animal[i].cry();
}

}

}
-------------本文结束感谢您的阅读-------------