0
点赞
收藏
分享

微信扫一扫

【Java】实训动物乐园


Java.实训动物乐园

目录:

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

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

   ​​1.项目需求​​​    

    ​​2.项目思路​​​     

   ​​3.代码实现​​

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

1.java面向对象整理图:

【Java】实训动物乐园_开发语言

2.难点:

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

​​返回顶部​​

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

1.项目需求

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

【Java】实训动物乐园_构造器_02

【Java】实训动物乐园_构造器_03


【Java】实训动物乐园_返回顶部_04

【Java】实训动物乐园_开发语言_05


​​返回顶部​​

2.项目思路

【Java】实训动物乐园_构造方法_06


【Java】实训动物乐园_构造器_07


根据任务描述,Cat类和Duck类都具有name、legNum属性,以及shount()方法,所以我们可以将共有的属性提取到Animal类中,在子类中留下特有属性或方法,设Animal为父类,Cat、Duck为子类,提高代码的重用性。

但是考虑到Animal仅是抽象的总称,具体对象还得到Cat、Duck,所以子类必需要重写父类的shout()方法,所以可以将shout()方法设计为抽象方法

【Java】实训动物乐园_java_08

当我们需要添加新的动物成员时,会遇到新的问题。假如我们需要添加一个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("感谢使用!");
}
}

​​返回顶部​​

举报

相关推荐

实训5.3

实训4.1

实训5.2

坦克实训

项目实训(三)

hadoop实训心得

Python实训题目

0 条评论