Day022 项目:动物乐园

动物乐园项目

1、覆盖技能点:

面向对象特性:封装、继承、多态
抽象类和接口的概念、语法、用处
手动抛出异常和捕获异常

2、需求说明

(1)系统概述:
以面向对象思想设计动物乐园
动物乐园包括的成员:猫、鸭子。属性:名称、腿;方法:叫
(2)开发思路。
第一,先设计猫和鸭类结构。
Animal父类:主要包含名称,腿两个属性,以及叫方法。
Cat和Duck子类:继承父类,重写方法。
测试类:Cat和Duck对象,并输出动物信息(名字,腿数,叫声)
第二,增加新成员海豚,鉴于其没有腿这一属性,重新设计类结构。
即将父类中的腿属性拿出,单独作为一个接口,在Cat和Duck子类中予以实现。
第三,实现修改数据功能。
使用户可以修改三种动物的信息,如果腿的条数不符合客观则手动抛出异常。

3、实现效果

界面如下:
Day022 项目:动物乐园_第1张图片
演示效果如下:
Day022 项目:动物乐园_第2张图片

4、最终代码如下

(1)父类和接口
Animal父类:

/**
 * 这是动物乐园项目。
 * 这是父类。
 */
package com.xtjy.nj.zoo.entity;

public abstract class Animal {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Animal() {
	}
	public Animal(String name) {
		super();
		this.name = name;
	}
	public abstract String shout();
	@Override
	public String toString() {
		return "Animal [name=" + name + "]";
	}
	
	
}

Leg接口:

/**
 * 这是接口:是否是陆地上的动物,猫和鸭子实现该接口。
 */
package com.xtjy.nj.zoo.service;

public interface Territal {
	int legNum();

	int getLegNum();
	
	
}

(2)继承父类和实现接口
Cat子类:

package com.xtjy.nj.zoo.entity;

import com.xtjy.nj.zoo.service.Territal;


public class Cat extends Animal implements Territal{
	private int legNum;
	public int getLegNum() {
		return legNum;
	}

	public void setLegNum(int legNum) {
		this.legNum = legNum;
	}

	public String shout(){
		return "喵喵";
	}

	public Cat() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Cat(String name,int legNum) {
		super(name);
		this.legNum = legNum;
	}
//	public String toString(){
//		return super.toString();
//	}

	@Override
	public int legNum() {
		// TODO Auto-generated method stub
		return this.legNum;
	}
}

Duck子类:

package com.xtjy.nj.zoo.entity;

import com.xtjy.nj.zoo.service.Territal;


public class Duck extends Animal implements Territal{
	private int legNum;
	
	public int getLegNum() {
		return legNum;
	}

	public void setLegNum(int legNum) {
		this.legNum = legNum;
	}

	@Override
	public String shout() {
		return "嘎嘎";
	}

	public Duck() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Duck(String name,int legNum) {
		super(name);
		this.legNum = legNum;
		// TODO Auto-generated constructor stub
	}

	@Override
	public int legNum() {
		return this.legNum;
	}
}

Dolphine子类:

package com.xtjy.nj.zoo.entity;

public class Dolphine extends Animal {

	@Override
	public String shout() {
		return "海豚音";
	}

	public Dolphine() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Dolphine(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}
	
	
}

(3)自定义异常

package com.xtjy.nj.zoo.utils;

public class ExceptionJudge extends Exception{

	public ExceptionJudge(String message) {
		super(message);
	}
	
}

(4)使用组合

package com.xtjy.nj.zoo.controller;

import java.util.Scanner;

import com.xtjy.nj.zoo.entity.Animal;
import com.xtjy.nj.zoo.entity.Cat;
import com.xtjy.nj.zoo.entity.Dolphine;
import com.xtjy.nj.zoo.entity.Duck;
import com.xtjy.nj.zoo.service.Territal;
import com.xtjy.nj.zoo.utils.ExceptionJudge;

public class ZooManager {
	Animal[] animals = new Animal[3];
	
	//首先,初始化动物的信息
	public void initial(){
		Cat cat = new Cat("加菲猫",4);
		Duck duck = new Duck("唐小鸭",2);
		Dolphine dolp = new Dolphine("奇奇");
		animals[0] = cat;
		animals[1] = duck;
		animals[2] = dolp;
	}
	
	/**
	 * 需求一:显示所有动物的信息
	 */
	public void showAnimals(){
		System.out.println("动物名字\t动物的腿数\t动物的叫声");
		for(Animal a:animals){
			String name = a.getName();
			int legNum = 0;
			if(a instanceof Territal){
				legNum = ((Territal) a).getLegNum(); 
			}
			String shout = a.shout();
			String leg = (legNum==0)?"":(legNum+"");
			System.out.println(name+"\t"+leg+"\t"+shout);
		}
	}
	
	/**
	 * 需求二:修改动物的信息
	 */
	int choose;
	Scanner sc = new Scanner(System.in);
	public void remind(){
		System.out.println("是否要修改动物的信息?输入0进入,其他退出。");
		choose = sc.nextInt();
	}
	public void modifyAnimal() throws ExceptionJudge{
		//记录用户输入的新动物的名字
		String[] names = new String[3];
		//记录用户输入的新动物的腿数
		int[] nums = new int[3];
		System.out.println("请输入猫咪的名称:");
		names[0] = sc.next();
		System.out.println("请输入小猫的腿数:");
		nums[0] = sc.nextInt();
		if(nums[0]!=4){
			String message = "猫的腿数只能为4。";
			throw new ExceptionJudge(message);
		}
		System.out.println("请输入鸭子的名称:");
		names[1] = sc.next();
		System.out.println("请输入鸭子的腿数:");
		nums[1] = sc.nextInt();
		if(nums[1]!=2){
			String message = "鸭子的腿数只能为2。";
			throw new ExceptionJudge(message);
		}
		System.out.println("请输入海豚的名称:");
		names[2] = sc.next();
		
		animals[0] = new Cat(names[0],nums[0]);
		animals[1] = new Cat(names[1],nums[1]);
		animals[2] = new Dolphine(names[2]);
		
	}
	
	
	
}

(5)测试*

/**
 * 测试ZooManger
 * 效果:显示动物信息并询问是否修改——→输入0,表示进入修改——→进入修改,则获取用户的输入并更新动物信息;期间,做用户输入信息判断——→显示动物信息并询问是否修改,如此往复
 * ——→输入0以外的其他任何数字,表示退出修改。
 */
package com.xtjy.nj.zoo.controller;

import com.xtjy.nj.zoo.utils.ExceptionJudge;

public class TestManager {

	public static void main(String[] args) {
		ZooManager zm = new ZooManager();
		zm.initial();
		
		boolean isExit;
		do{
			isExit = false;
			zm.showAnimals();
			zm.remind();
			if(zm.choose!=0){
				isExit=true;
			}else{
				try {
					zm.modifyAnimal();
				} catch (ExceptionJudge e) {
					e.getMessage();
					e.printStackTrace();
				}
			}
			
		}while(!isExit);
		System.out.println("退出程序。");
		
	}

}

你可能感兴趣的:(培训记录)