本次项目是:以面向对象的思想设计动物乐园系统。 动物乐园中有猫,狗,鸭子等成员,还可以增加新成员。 猫和鸭子都有自己的名字,都有自己的腿,但腿的条数不同,猫和鸭子会发出叫声,猫的叫声是:喵喵喵……,鸭子的,本文添加的是猫,狗,海豚

首先先建立一个父类(动物类),定义的是姓名,

/**
* 父类,动物类
* @author liuchunyong
*
*/
public abstract class Animal {
private String name;

public Animal() {

}
public Animal(String name){
this.name=name;
}
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
public abstract String shout();//动物叫
}

/**

*再次定义一个接口,定义腿的数量,接口的作用为规范你使用这个接口那就必须存在他定义的方法

*/

public interface Terrestrial {//关于腿的定义

public int gerLegNum() ;

}

//下面就是定义猫,狗,继承父类并且继承接口,海豚没腿所以只是继承父类

/*
* 猫类
*/
public class Cat extends Animal implements Terrestrial {
private int LegNum;
public Cat(){

}
public Cat(String name,int LegNum) {
super(name);
this.LegNum=LegNum;

}

public int getLegNum() {
return LegNum;
}

public void setLegNum(int legNum) {
LegNum = legNum;
}

public String shout() {
return "喵喵喵.......";
}
public int gerLegNum() {

return LegNum;
}

}

//狗

public class Dog extends Animal implements Terrestrial {
private int LegNum;
public Dog(){

}
public Dog(String name,int LegNum) {
super(name);
this.LegNum=LegNum;
}

public int getLegNum() {
return LegNum;
}

public void setLegNum(int legNum) {
LegNum = legNum;
}

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

public int gerLegNum() {

return LegNum;
}

}

//海豚类

public class Dolphin extends Animal {
private static int legNum=0;

public static int getLegNum() {
return legNum;
}
public static void setLegNum(int legNum) {
Dolphin.legNum = legNum;
}
public Dolphin(String name){
super(name);

}
public String shout() {
return "海豚叫.......";
}

}

/**

*下面我们在定义一个类,存放我们的数字,并且定义显示动物方法,修改方法

*/

import java.util.*;

public class AnimalMgr {

Scanner input=new Scanner(System.in);

Animal[] an=new Animal[3];

//初始化数据

int choose;//定义是否输入为零,退出

public void init(){//动物信息

//Animal[] an=new Animal[3];
an[0]=new Cat("加菲猫",4);
an[1]=new Dog("旺财",4);
an[2]=new Dolphin("海豚奇奇");
}

//展示所有动物的信息

public void showAnimals(){

System.out.println("动物名字"+"\t\t腿的条数:"+"\t\t动物叫");
for(int i=0;i<an.length;i++){
if(an[i] instanceof Cat){
Cat aa=(Cat)an[i];
System.out.println(aa.getName()+"\t\t"+aa.getLegNum()+"\t\t"+aa.shout());
}else if(an[i] instanceof Dog){
Dog bb=(Dog)an[i];
System.out.println(bb.getName()+"\t\t"+bb.getLegNum()+"\t\t"+bb.shout());

}else if(an[i] instanceof Dolphin){
Dolphin cc=(Dolphin)an[i];

System.out.println(cc.getName()+"\t\t"+cc.getLegNum()+"\t\t"+cc.shout());

}

}

System.out.println("是否要继续操作:按0进行修改操作,其它任意数字退出");

choose=input.nextInt();

}
//修改数据
public void ModifyAnimal() throws Exception {//自定义手动抛出异常

String[] names=new String[3];

int[] nums=new int[2];

System.out.println("请输入猫的名字:");

names[0]=input.next();

System.out.println("请输入猫的腿数:");

nums[0]=input.nextInt();

if(nums[0]!=4){

throw new Exception("猫只有四条腿");

}

System.out.println("请输入狗的名字:");

names[1]=input.next();

System.out.println("请输入狗的腿数:");

nums[1]=input.nextInt();

if(nums[1]!=4){

throw new Exception("狗只有四条腿");

}
System.out.println("请输入海豚的名字:");
names[2]=input.next();
//接受键盘输入的值
an[0]=new Cat(names[0],nums[0]);
an[1]=new Dog(names[1],nums[1]);
an[2]=new Dolphin(names[2]);

}

}

//最后建立一个测试的类,来显示给用户

import java.util.Scanner;

public class Test {

public static void main(String[] args){
AnimalMgr am=new AnimalMgr();
am.init();
//循环数据
do{
am.showAnimals();//显示数据
if(am.choose==0)
try {
am.ModifyAnimal();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}while(am.choose==0);
System.out.println("谢谢使用,退出程序!!");

}

}

有参考博客: https://blog.csdn.net/ruiguang21/article/details/52793839

Java面向对象的练习。动物乐园的更多相关文章

  1. 【重走Android之路】【Java面向对象基础(三)】面向对象思想

    [重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想   1 面向对象的WWH   1.1 What--什么是面向对象         首先,要理解“对象”.在Thinkin ...

  2. java面向对象(三)之抽象类,接口,向上转型

    java类 java类分为普通类和抽象类,接口,上一节我大概讲了java类的一般格式,今天将抽象类和接口.同时讲一下它们是怎样存储的. 最重要的是理解为什么要有抽象和接口,这样学下来你猜不会迷茫,才能 ...

  3. Java面向对象 继承(下)

     Java面向对象   继承(下) 知识概要:               (1)抽象类 1.1 抽象类概述                            1.2 抽象类的特点       ...

  4. 【Java学习笔记之十三】初探Java面向对象的过程及代码实现

    理解Java面向对象的重要知识点: 一. 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的.红色的.白色的... 这里,汽车设计图就是我们说的类(class ...

  5. JAVA面向对象-----super关键字

    JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量 ...

  6. Java面向对象(二、继承)

    Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法 ...

  7. Java面向对象内存分析

    title: Java面向对象内存分析 date: 2018-07-28 11:12:50 tags: JavaSE categories: - Java - JavaSE 一.Java虚拟机的内存区 ...

  8. Java面向对象----个人参考资料

    Java面向对象 :什么是面向对象.类与对象.封装.构造方法.static关键字.继承.抽象类.接口.多态 一.什么是面向对象 1.面向过程思想 面向过程:(PO,Procedure Oriented ...

  9. JavaSE学习总结(四)——Java面向对象十分钟入门

    面向对象编程(Object Oriented Programming,OOP)是一种计算机模拟人类的自然思维方式的编程架构技术,解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题.Ja ...

随机推荐

  1. Impala介绍

    Impala介绍 Impala支持的文件格式 Impala可以对Hadoop中大多数格式的文件进行查询.它能通过create table和insert的方式将一部分格式的数据加载到table中,但值得 ...

  2. 【机器学习】推荐系统、SVD分解降维

    推荐系统: 1.基于内容的实现:KNN等 2.基于协同滤波(CF)实现:SVD → pLSA(从LSA发展而来,由SVD实现).LDA.GDBT SVD算是比较老的方法,后期演进的主题模型主要是pLS ...

  3. HDU 5862 Counting Intersections (离散化+扫描线+树状数组)

    题意:给你若干个平行于坐标轴的,长度大于0的线段,且任意两个线段没有公共点,不会重合覆盖.问有多少个交点. 析:题意很明确,可是并不好做,可以先把平行与x轴和y轴的分开,然后把平行y轴的按y坐标从小到 ...

  4. idea使用的知识

    1. 如何设置,使IntelliJ IDEA智能提示忽略大小写.    很好用,在settings->Editor->General-->Code Completion里设置.2. ...

  5. 图的最小切隔问题Minimum Cuts

    前提条件是这样的:输入一个图(可以是有向图,也可以是无向图,允许平行边存在),我们要做的事情是将这个图切割成两个子图,(切割的定义:将图中的所有顶点分为两个集合A和B,要求这两个集合非空)假设这个图中 ...

  6. 图解 SSH上传安装tomcat

    安装步骤: 1.SSH上传压缩包 2.[root@localhost soft]# tar  -zxvf apache-tomcat-7.0.61.tar.gz    //解压安装 解压结果 3.[r ...

  7. 2017-10-26 NOIP模拟赛

    三分咲 #include<iostream> #include<cstdio> #include<ctime> using namespace std; int n ...

  8. 解读人:范徉,Methylome and Metabolome Analyses Reveal Adaptive Mechanisms in Geobacter sulfurreducens Grown on Different Terminal Electron Acceptors(甲基化组学和代谢组学分析发现Geobacter sulfurreducens生长在不同电子终受体中的适应机制)

    发表时间: (2019年4月) IF:3.950 单位: Fujian Provincial Key Laboratory of Soil Environmental Health and Regul ...

  9. 如何使用JDBC Request跨数据库查询后引用查询的结果作为下一个JDBC Request的入参

    [前言] 今天来给大家介绍下如何使用JDBC Request跨数据库查询后引用查询的结果作为下一个JDBC Request的入参! 因为我现在所测的系统模块中部分表在不同的数据库中,所以在用JDBC ...

  10. Visual Studio 2017&C#打包应用程序详细教程,重写安装类获取安装路径

    Visual Studio搞了个Click One,在线升级是方便了,但对于俺们这苦逼的业余程序猿就... 别着急,折腾一下,还是能做出打包安装程序的.请移步CSDN看smallbabylong的文章 ...