作业 3-16
来源:3-16 编程练习
jia_蛙
2019-08-02 16:56:50
package com.zhou.animals;
/**
* Animal 父类
* @author 25677
*
*/
public class Animal {
//属性: kind 种类
private String kind;
//无参构造
public Animal() {
}
//带参构造:种类
public Animal(String kind) {
this.setKind(kind);
}
//getter setter
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
//cry() 无返回值
public void cry() {
System.out.println("动物都会叫喊");
}
}package com.zhou.animals;
/**
* Cat 子类
* @author 25677
*
*/
public class Cat extends Animal {
@Override
public void cry() {
System.out.println("小猫的叫声:喵喵喵~~~");
}
}package com.zhou.animals;
/**
* Dog 子类
* @author 25677
*
*/
public class Dog extends Animal{
@Override
public void cry() {
System.out.println("小狗的叫声:汪汪汪~~~");
}
}package com.zhou.animals;
/**
* Sheep 子类
* @author 25677
*
*/
public class Sheep extends Animal{
@Override
public void cry() {
System.out.println("小羊的叫声:咩咩咩~~~");
}
}package com.zhou.animals;
/**
* 测试类
* @author 25677
*
*/
public class Test {
public static void main(String[] args) {
//首先生成长度为5的父类对象数组
Animal[] animals = new Animal[5];
for(int i = 0; i<animals.length;i++) {
//生成0-2随机数
int b = (int)(Math.random()*3);
//保存进数组中去
for(int a = 0; a<animals.length; a++) {
if(animals[a] == null) {
animals[a] = save(a);
save(a).cry();
}
}
}
}
public static Animal save(int a) {
if(a == 0) {
return new Cat();
}else if(a == 1) {
return new Dog();
}else {
return new Sheep();
}
}
}写着个题目好像没什么思路 ,不知道怎么写, 然后跟着任务分析写成这样,除了这个静态方法 返回的时候是返回 的Animal 类型的 有一个向上转型,我这里好像就没用到多态的东西了,总感觉我写的有问题,老师你帮我看看, 指点一下。
1回答
同学,你好!我们的任务分析其实就是思路啦。代码整体写得还是很不错的,Test类有些问题,如下所示的代码:第一个save(a)改成save(b),通过随机数b生成对象。第二个save(a)改成animal[a],不要再重新调用save(a)了,会生成新的对象

这样使用其实已经用到了多态,因为Animal数组元素都是Animal类的引用,而把对象的值赋值给了数组元素,也就是父类Animal的引用指向了子类的对象,然后根据子类对象的不同去调用子类的方法。
题目要求是先循环生成对象,再用一个循环去调用方法,你都写在一起了。这样做也没关系,但可以使用一个for循环完成。改正后的Test类代码如下,注意看注释:
package com.zhou.animals;
/**
* 测试类
*
* @author 25677
*
*/
public class Test {
public static void main(String[] args) {
// 首先生成长度为5的父类对象数组
Animal[] animals = new Animal[5];
//for (int i = 0; i < animals.length; i++) {
// 生成0-2随机数
//int b = (int) (Math.random() * 3);
// 保存进数组中去
for (int a = 0; a < animals.length; a++) {
int b = (int) (Math.random() * 3);
//if (animals[a] == null) {
animals[a] = save(b);//将之前的a改成b,根据b随机生成
//save(a).cry();
animals[a].cry();//通过数组元素去调用cry(),不要再用save方法,会重新产生一个新对象
//}
}
//}
}
public static Animal save(int a) {
if (a == 0) {
return new Cat();
} else if (a == 1) {
return new Dog();
} else {
return new Sheep();
}
}
}如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题