4.在第三题的进行功能扩展。
(1)增加一种新的动物类型:Pig(猪),实现shout()方法。
(2)修改Store类的get()方法:如果传入的参数是字符串dog,则返回一个Dog对象;如果传入的参数是字串 pig,则返回一个Pig对象;否则,返回一个Cat对象。
(3)在测试类Test中加以测试:向Store类的get()方法中传入参数“pig”,并返回的对象中调用shout()方 法,看看与预期的结果是否一致。
package com.homework.demo.test6_4;
/**
* 动物接口
* @author suixin
*
*/
public interface Animal {
void shout();
}
package com.homework.demo.test6_4;
public class Cat implements Animal {
@Override
public void shout() {
// TODO Auto-generated method stub
System.out.println("M M!");
}
}
package com.homework.demo.test6_4;
public class Dog implements Animal {
@Override
public void shout() {
// TODO Auto-generated method stub
System.out.println("W W!");
}
}
package com.homework.demo.test6_4;
public class Pig implements Animal {
@Override
public void shout() {
// TODO Auto-generated method stub
System.out.println("猪叫!");
}
}
package com.homework.demo.test6_4;
public class Store {
public static Animal get (String choice) {
if (choice.equalsIgnoreCase("dog")) {
return new Dog();
}else if (choice.equalsIgnoreCase("pig")) {
return new Pig();
}else {
return new Cat();
}
}
}
package com.homework.demo.test6_4;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal al = Store.get("dog");
al.shout();
Animal a2 = Store.get("pig");
a2.shout();
}
}
5.对贯穿本书的案列电子宠物系统的类结构进行重构,要求如下:
>定义Eatble接口,在接口中定义eat( )方法,表示吃饭功能。>编写测试类,实现狗吃饭,企鹅游泳和狗玩飞盘游戏的功能,并输出企鹅信息。
package com.homework.demo.test6_5;
/**
* 宠物狗类继承宠物父类,实现接飞盘接口和吃饭接口
* @author suixin
*
*/
public class Dog extends Pet implements Eatable, FlyingDiscCatchable {
public Dog(String name, int health, int love) {
super(name, health, love);
// TODO Auto-generated constructor stub
}
@Override
public void catchingFlyDisc() { //接飞盘
// TODO Auto-generated method stub
System.out.println("狗狗"+super.name+"正在接飞盘。");
super.health -= 10;
super.love +=5;
}
@Override
public void eat() { //吃饭
// TODO Auto-generated method stub
System.out.println("狗狗"+super.name+"吃饱啦!健康值增加5。");
super.health += 5;
}
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("宠物的自白:\n我的名字叫"+this.name+",健康值是"+this.health
+",和主人的亲密度是"+this.love);
}
}
package com.homework.demo.test6_5;
/**
* 吃饭功能接口
* @author suixin
*
*/
public interface Eatable {
void eat();//吃饭功能
}
package com.homework.demo.test6_5;
/**
* 接飞盘功能接口
* @author suixin
*
*/
public interface FlyingDiscCatchable {
void catchingFlyDisc(); //接飞盘功能
}
package com.homework.demo.test6_5;
/**
* 企鹅类
* @author suixin
*
*/
public class Penguin extends Pet implements Eatable, Swimmable {
public Penguin(String name, int health, int love) {
super(name, health, love);
// TODO Auto-generated constructor stub
}
@Override
public void swim() { //游泳
// TODO Auto-generated method stub
System.out.println("企鹅"+super.name+"正在游泳。");
super.health -= 10;
super.love +=5;
}
@Override
public void eat() { //吃饭
// TODO Auto-generated method stub
System.out.println("企鹅"+super.name+"吃饱啦!健康值增加5。");
super.health += 5;
}
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("宠物的自白:\n我的名字叫"+this.name+",健康值是"+this.health
+",和主人的亲密度是"+this.love);
}
}
package com.homework.demo.test6_5;
/**
* 宠物父类
* @author suixin
*
*/
public abstract class Pet {
String name; //宠物昵称
int health = 100; //健康值
int love = 0; //亲密度
public Pet(String name, int health, int love) {
super();
this.name = name;
this.health = health;
this.love = love;
}
/**
* 输出基本信息
*/
public abstract void print();
/**
* 输出实现功能后的属性值
*/
public void print2() {
System.out.println(this.name+"当前的健康值是"+this.health+",和主人的亲密度是"+this.love);
}
}
package com.homework.demo.test6_5;
/**
* 游泳功能接口
* @author suixin
*
*/
public interface Swimmable {
void swim(); //游泳功能
}
package com.homework.demo.test6_5;
/**
* 测试类
* @author suixin
*
*/
public class TestPet {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog dog = new Dog("旺财", 80, 0); //创建狗的对象
dog.print(); //调用输出信息方法
dog.eat(); //吃饭方法
dog.print2(); //显示当前属性值方法
dog.catchingFlyDisc(); //接飞盘方法
dog.print2(); //显示当前属性值
System.out.println("\n");
Penguin penguin = new Penguin("鸥欧", 80, 0); //创建企鹅对象
penguin.print(); //调用输出信息方法
penguin.eat(); //吃饭方法
penguin.print2(); //显示当前属性值方法
penguin.swim(); //游泳方法
penguin.print2(); //显示当前属性值
}
}