【Java】实训动物乐园

Java.实训动物乐园


目录:

一、面向对象知识梳理及难点
二、综合训练----动物乐园
       1.项目需求
       2.项目思路
       3.代码实现


一、面向对象知识梳理及难点

1.java面向对象整理图:
在这里插入图片描述

2.难点:

1.面向对象的设计过程
2.使用权限修饰符进行类的封装
3.继承关系下构造方法的执行
4.利用多态减少代码量提高代码的的可扩展性、可维护性
5.this、super、static、final关键字的使用
6.接口与抽象类的异同

返回顶部


二、综合训练----动物乐园

1.项目需求

以面向对象思想设计动物乐园系统。动物乐园中有猫、鸭等成员,还可能增加新成员。猫鸭都有自己的的名字;都有腿,但是腿的条数不一样;猫和鸭都能发出叫声,比如“喵喵喵…”“嘎嘎嘎…”。要求进行面向对象设计。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
返回顶部


2.项目思路

在这里插入图片描述
在这里插入图片描述
根据任务描述,Cat类和Duck类都具有name、legNum属性,以及shount()方法,所以我们可以将共有的属性提取到Animal类中,在子类中留下特有属性或方法,设Animal为父类,Cat、Duck为子类,提高代码的重用性。
但是考虑到Animal仅是抽象的总称,具体对象还得到Cat、Duck,所以子类必需要重写父类的shout()方法,所以可以将shout()方法设计为抽象方法
在这里插入图片描述

当我们需要添加新的动物成员时,会遇到新的问题。假如我们需要添加一个Dolphin成员,海豚十分特殊,它没有脚。假如我们也让它继承Animal类,显然不合适,但是它也是动物,也应该继承Animal类,此时我们需要进一步优化Animal类,这是三种动物共有的属性只有name,那么剩下的legNum怎么办?

这时我们就要想到利用接口,接口表示一种约定。当我们定义陆生(Terrestrial)接口,只要有脚的陆生动物都可以继承时,问题似乎得到了解决。我们可以认为有脚是Cat、Duck特有的属性,在本类中声明。Cat、Duck类在继承Animal类的同时实现(Terrestrial)接口,并重写其getLegNum()方法,获取腿数。

返回顶部


3.代码实现

package 指导学习宠物乐园;

public abstract class Animal {
	
	//属性
	private String name = ""; //名称
	
	/**
	 * 无参构造器
	 */
	public Animal() {
		super();
		// TODO Auto-generated constructor stub
	}

	
	/**
	 * 含参构造方法导入动物对象
	 */
	public Animal(String name){
		this.name = name;
	}
	
	/**
	 * set、get方法封装
	 */
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * 抽象叫声方法
	 */
	public abstract void shout();
	
}
package 指导学习宠物乐园;

public interface Terrestrial {
	/**
	 * 陆生动物获取腿数
	 */
	public abstract int getLegNum();
}
package 指导学习宠物乐园;

public class Cat extends Animal implements Terrestrial{

	private int legNum = 0; //腿数
	
	/**
	 * 无参构造器
	 */
	public Cat() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	/**
	 * 含参构造方法
	 * @param name
	 * @param legNum
	 */
	public Cat(String name, int legNum) {
		super(name);
		this.legNum = legNum;
		// TODO Auto-generated constructor stub
	}

	/**
	 * set\get方法
	 * @return
	 */
	public int getLegNum() {
		return legNum;
	}
	public void setLegNum(int legNum) {
		this.legNum = legNum;
	}
	
	/**
     * 叫的方法
     */
	@Override
	public void shout() {
		// TODO Auto-generated method stub
		System.out.println("喵喵喵!");
	}

}

public class Duck extends Animal implements Terrestrial{

	private int legNum = 0; //腿数
	
	
	/**
	 * 无参构造器
	 */
	public Duck() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	/**
	 * 含参构造方法
	 * @param name
	 * @param legNum
	 */
	public Duck(String name, int legNum) {
		super(name);
		this.legNum = legNum;
		// TODO Auto-generated constructor stub
	}
	
	/**
	 * set\get方法
	 * @return
	 */
	public int getLegNum() {
		return legNum;
	}
	public void setLegNum(int legNum) {
		this.legNum = legNum;
	}
	
    /**
     * 叫的方法
     */
	@Override
	public void shout() {
		// TODO Auto-generated method stub
		System.out.println("嘎嘎嘎!");
	}

}

public class Dolphin extends Animal{

	/**
	 * 无参构造器
	 */
	public Dolphin() {
		super();
		// TODO Auto-generated constructor stub
	}
	/**
	 * 含参构造方法
	 * @param name
	 */
	public Dolphin(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	/**
     * 叫的方法
     */
	@Override
	public void shout() {
		// TODO Auto-generated method stub
		System.out.println("海豚音!");
	}

}
package 指导学习宠物乐园;

import java.util.Scanner;

public class Tset {
	
	//创建空数组
	static Animal[] animals = new Animal[3];
	static Scanner input = new Scanner(System.in);
	static int choice ;
    
	/**
     * 开始 
     */
	public static void start(){
		//初始信息
		animals[0] = new Cat("加菲猫",4);
		animals[1] = new Duck("唐小鸭",2);
		animals[2] = new Dolphin("海豚奇奇");
		load();
		choice = input.nextInt();
	}
	
	/**
	 * 加载
	 */
	public static void load(){
		System.out.println("动物名字"+"\t\t"+"腿的条数"+"\t\t"+"动物叫");
		for(int i=0;i<animals.length;i++){
			if(animals[i] instanceof Terrestrial){
				Terrestrial trt1 = (Terrestrial) animals[i];
				int legNum = trt1.getLegNum();
				System.out.print(animals[i].getName()+"\t\t"+legNum+"\t\t");
				animals[i].shout();
				
			}else {
				System.out.print(animals[i].getName()+"\t\t"+0+"\t\t");
				animals[i].shout();
			}	
	    }
		System.out.println("是否要进行修改数据:按0进行修改操作,其他任意数字退出.");
	}
	
	public static void modify() throws Exception{
		
		//创建姓名数组,用来存入修改后的数据
		String[] names = new String[3];
		//创建腿数数组,用来存入修改后的数据
		int[] number = new int[3];
		
		//Cat
		System.out.println("请输入猫的名称:");
		names[0] = input.next();
		System.out.println("请输入猫腿的条数:");
		number[0] = input.nextInt();
		
		//判断异常
		if (number[0] != 4) {
			throw new Exception("输入错误,猫只有4条腿!");
		}
		
		//Duck
		System.out.println("请输入鸭子的名称:");
		names[1] = input.next();
		System.out.println("请输入鸭子腿的条数:");
		number[1] = input.nextInt();
		
		//判断异常
		if (number[1] != 2) {
			throw new Exception("输入错误,鸭子只有两条腿!");
		}
		
		//Dolphin
		System.out.println("请输入海豚的名称:");
		names[2] = input.next();
		
		//存入修改后的信息
		animals[0] = new Cat(names[0], number[0]);
		animals[1] = new Duck(names[1], number[1]);
		animals[2] = new Dolphin(names[2]);
	
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
        start();
        //如果choice为零,进入修改
        if(choice == 0){
        	try{
    			modify();          //try块开始修改
    		}catch(Exception e){
    			e.printStackTrace(); //catch异常并输出相关异常
    		}finally{
    			load();            //加载修改后的信息
    			choice = input.nextInt(); 
    		}
        }
        System.out.println("感谢使用!");
	}	
}

返回顶部


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛ひ追导弹'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值