大一 JAVAOOP-T4 抽象类和接口-实践任务指南(美和易思)
训练目标:
1.抽象类设计
2.Final 修饰符的使用
3.接口设计
4.通过接口设计实现模拟动物的吼叫声
1. 学生实践练习
需求说明
不同的动物都有进食的行为,但是在进食前需要捕获到食物后才可以进食,要求定义一个抽
象的动物类,该类中有一个抽象的捕食方法,和一个非抽象的进食方法,在进食方法中调用
捕食方法。定义 3 个不同的动物类,分别是虎、猴、狼,这些类继承抽象的动物类。
每种动物具有相同的进食行为,即将食物嚼碎后咽下,但动物具有不同的捕食行为。最终控
制输出每种动物的进食结果。程序运行结果如图 4.3 所示。
实现思路
(1)创建 3 个动物类,分别是老虎(Tigger)类、猴子(Monkey)类和狼(Wolf)类,定
义动物抽象父类,在该类中定义捕食抽象方法(predation)和非抽象方法进食(eat)方法,
在该方法中调用捕食方法。所有的动物类都继承 Animal 类,在各自的子类中重写 predation()
方法,在方法中输出如何捕食。
(2)创建测试类 Test,在该类中定义程序入口方法 main,在该方法中创建不同的动物对象,
并调用各自对象的 eat()方法。
public abstract class Animal {
//定义捕食抽象方法
public abstract void predation();
//定义非抽象进食方法
public void eat(){
System.out.println("吃肉进肚子");
}
}
public class Tigger extends Animal {
public void predation() {
System.out.println("老虎捕食");
}
}
public class Monkey extends Animal{
public void predation() {
System.out.println("猴子捕食");
}
}
public class Wolf extends Animal{
public void predation() {
System.out.println("狼王捕食");
}
}
public class Test {
public static void main(String[] args) {
Animal tigger = new Tigger();
tigger.predation();
tigger.eat();
Animal monkey = new Monkey();
monkey.predation();
monkey.eat();
Animal wolf = new Wolf();
wolf.predation();
wolf.eat();
}
}
2.学生实践练习
需求说明
创建一个数学工具(MathUtils)类,将该类设计为最终类,该类的构造方法定义成私有访
问权限,防止外界实例化该类。在类定义静态 double 类型常量π,其值为 3.14159268,定
义静态方法 addition(),该方法用于计算一个 int[]类型的数组中所有元素的和。定义静态
方法 circ(),用于计算圆形的周长。定义静态方法 sort,该方法用于对传入的 int[]数组
进行升序排序。通过使用该数学工具类的不同方法,实现不同的操作,程序运行结果如图
实现思路
(1)创建 MathUtils 类,该类可作为一个常用的数学工具类,其中包括静态常量π,π值
为 3.14159268,静态方法 addition(int[] data),该方法用于计算传入数组的各元素和,
静态方法 cicr(double r),该方法用于计算传入半径长度的圆周长,静态方法 sort(int[]
data),该方法将传入的数组进行升序排序。
(2)创建测试类 MathUtils,在该类的入口(main)方法中,使用 MathUtils 类完成图 4.8
输出内容的相关操作。
import java.util.Arrays;
public final class MathUtils {
final static double π = 3.14159268;
public static final String PI = null;
//构造方法定义成私有访问权限
private MathUtils() {
}
//计算数组元素的和
public final static void addition(int[] data) {
int sum = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
System.out.println("data数组各元素和="+sum);
}
//计算圆形的周长
public final static void circ(double r) {
double perimeter = 2*π*r;
System.out.printf("半径为%f的园的周长是%f\n",π,perimeter);
}
//对数组进行排序
public final static void sort(int[] data) {
System.out.println("data数组排序前的结果:");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]+"\t");
}
System.out.println();
System.out.println("data数组排序后的结果:");
for (int i = 0; i < data.length; i++) {
Arrays.sort(data);
System.out.print(data[i]+"\t");
}
}
}
public class MathUtilsTest {
public static void main(String[] args) {
int[] data = new int[] {5,7,1,3,2,4,8,9,6};
System.out.println("π的值:"+MathUtils.PI);
MathUtils.addition(data);
MathUtils.circ(2);
MathUtils.sort(data);
}
}
3.学生实践练习
需求说明
通过接口摸拟麦当劳食物生产过程,程序运行结果如图所示
实现思路
(1)创建食物(Food)接口,该接口被所有的食物类所实现。在该接口中定义 getFood()方
法。
(2)创建麦香鸡(McChicken)类,该类实现 Food 接口,并重写 Food 接口的 getFood()方
法。
(3)创建薯条(Chips)类,该类实现 Food 接口,并重写 Food 接口的 getFood()方法。
(4)创建生产食品的工厂类(FoodFactory),在该类中定义静态方法 createFood(String
type)方法,在该方法中通过传入该方法参数的字符串值,判断用户需要何种食物,如果工
厂中有该食物,则创建该食物对象,否则给出友好提示信息
public class Chips implements Food{
public void getFood() {
System.out.println("薯条");
}
}
public class Client {
public static void main(String[] args) {
//通过食物工厂创建食物
Food mcchicken = FoodFactory.createFood("mcchicken");
mcchicken.getFood();
Food chips = FoodFactory.createFood("chips");
chips.getFood();
}
}
public interface Food {
public void getFood();
}
public class FoodFactory {
public static Food createFood(String type){
//通过传递的字符串参数判断用户需要的食物
if(type.equals("mcchicken")) {
//如果条件满足则创建对象的食物对象
return new McChicken();
}else if(type.equals("chips")) {
return new Chips();
} else {
System.out.println("对不起没有该食物!");
return null;
}
}
}
public class McChicken implements Food {
public void getFood() {
System.out.println("麦香鸡");
}
}
4.学生实践练习
需求说明
通过接口定义,编写一个程序,实现模拟动物的吼叫声。
public class Dog implements IAnimal{
//狗实现吼叫接口
public void sing() {
System.out.println("汪汪汪");
}
}
public interface IAnimal {
//动物吼叫接口
public abstract void sing();
}
public class Tiger implements IAnimal {
//老虎实现吼叫接口
public void sing() {
System.out.println("傲傲傲");
}
}
import com.t43.IAnimal;
public class Business {
//定义了一个IAnimal的接口变量
private IAnimal animal;
public void sing(){
animal.sing();
}
//通过setAnimal方法, 初始化动物对象。
public void setAnimal(IAnimal animal) {
this.animal = animal;
}
}
import com.t43.Dog;
public class Testsing {
public static void main(String[] args) {
Business business = new Business();
//business.setAnimal(new Dog());
business.setAnimal(new Dog());
business.sing();
}
}