Java:继承和多态实验(以狗,猫,青蛙为)

问题描述:

狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。狗通常的时候和人打招呼会通过“摇摇尾巴”,在被抚摸感到舒服的时候,会“旺旺叫”,而在受到惊吓情绪烦躁时,会发出“呜呜”声;
猫也生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。猫通常的时候和人打招呼会发出“喵~”的声音,在被抚摸情绪很好时,会发出“咕噜咕噜”声,而在受到惊吓时,会发出“嘶嘶”声;
青蛙是一种两栖动物(既是水生动物也是陆生动物),既不是哺乳类的也不是肉食性的,属于卵生。当青蛙情绪好的时候,会在岸边“呱呱呱”的唱歌,而在受到惊吓时,会“扑通一声跳入水中”;

问题分析:

首先需要抽取问题描述中对象
分析每个对象所具有的特征
分析每个对象所发出的动作
从这些对象的特征中,抽取类的属性和方法
分析类之间的关系,画出类结构图

难点分析:

抽取对象的基本的方法:找出句子中所使用的名词
例如:在句子“小猫喵喵叫”中,我们能够确定一个对象:猫;
确定对象发出的行为动作的基本的方法:找出句子中的动词
例如:“旺旺叫”、“喵喵叫”都属于对象发出的动作;
确定对象的属性或者特征的基本的方法:找出句子中的形容词
例如:“哺乳性的”、“肉食性的”、“卵生的”等等;
“是”的关系一般抽象为继承
例如:狗是一种动物,意味着:“狗”类 继承自“动物”类;
“有”的关系一般抽象为类的属性
例如:动物都有情绪,意味着:“情绪”是“动物”类的一个属性;

类关系图:

类关系图

阶段划分:

第一阶段(35分钟):不考虑情绪影响动物打招呼的方式
第二阶段(25分钟):考虑情绪影响动物打招呼的方式
第三阶段(40分钟):考虑陆生动物和水生动物

第一阶段:

不考虑情绪影响动物打招呼的方式
编写Animal类,没有mood属性,只有一种SayHello方法;
编写Dog类、Cat 类和 Frog 类,分别继承自Animal类,实现与Animal类不同的功能;
编写main方法,分别实例化以上三个类的三个对象,测试类方法实现的正确性;

package work03; //在work03包里,有包的可以在自己的工作栏修改包名,没有的可以直接删掉

import java.util.Scanner; //自动生成,不用打出来

/*java封装与继承-动物园
 * @Zivid
 * @2020.3.31
 */

abstract class Animal{//父类animal
	protected boolean mammal = true;//判断是否为哺乳动物
	protected boolean carnivorous = true;//判断是否为肉食动物
	public boolean isMammal(){//是哺乳
		return (mammal);
	}
	public boolean isCarniborous(){//是肉食
		return (carnivorous);
	}
	abstract String sayHello();//打招呼
}

class Dog extends Animal{ //在父类animal下继承为子类dog
	String name = "dog";
	public String sayHello() {
		return "摇摇尾巴";
	}
}

class Cat extends Animal{//在父类animal下继承为子类cat
	String name = "cat";
	public String sayHello() {
		return "喵喵叫";
	}
}

class Frog extends Animal{//在父类animal下继承为子类frog
	String name = "frog";
	public String sayHello() {
		return "呱呱呱";
	}
}

public class MyZoo_1 {
	
	public static void main(String[] args) {
		Dog dog = new Dog();//实例化一个Dog的对象
		Cat cat = new Cat();
		Frog frog = new Frog();
		System.out.println("     **************Welcom to MyZoo**************\n");
		System.out.println("Please Enter 'dog/cat/frog' for run and 'exit' for out");
		
	for(;;){ //循环进行
		String name = new String();
		@SuppressWarnings("resource") //SuppressWarnings可抑制下列sc的resource警告
		Scanner sc = new Scanner(System.in);//输入一个name
		
		name = sc.next();
		if(true){  //输入成功时进入
			//或者name != "dog"||name != "cat"||name == "frog"||name =="exit"
			switch(name){
			case "dog":
				System.out.println("狗通常的时候和人打招呼:"+ dog.sayHello());
				break;
			case "cat":
				System.out.println("猫通常的时候和人打招呼:"+ cat.sayHello());
				break;
			case "frog":
				System.out.println("青蛙情绪好的时候会在岸边::"+ frog.sayHello());
				break;
			case "exit":
				System.out.println("See You");
				System.exit(0); //退出
			default:
				System.out.println("Error,Enter again!");
			}
		 System.out.println("Please Enter Again,'dog/cat/frog' for run and 'exit' for out");
		
		}
		
		}
	
	}
	
}
第二阶段:

考虑情绪影响动物打招呼的方式
扩充Animal类、Dog类、Cat类和Frog类,增加Animal类的mood属性,并实现 sayHello 方法的多态性
扩充main方法;

第三阶段:

考虑陆生动物和水生动物
定义LandAnimal接口和WaterAnimal接口;
扩充Dog类、Cat类和Frog类,使其实现相应的接口;
扩充main方法;

运行效果:

在这里插入图片描述

总结:

通过本次项目案例练习了面向对象的Java实现,基本囊括了面向对象的三大特征:封装、继承、多态
巩固的知识点:
Java基本的程序结构;
类和对象、构造方法。this关键字;
类的封装,包括修饰符的使用:private/public/ protected
特殊修饰符:static、 final、abstract
类的继承(extends、super关键字);
接口的定义和实现(interface、implements关键字);
多态:方法重载和方法重写

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值