#分析以下需求,并用代码实现:

  •   1.定义动物类
    属性:
    年龄,颜色
    行为:
    eat(String something)方法(无具体行为,不同动物吃的方式和东西不一样,something表示吃的东西)
    生成空参有参构造,set和get方法
  •   2.定义狗类继承动物类
    行为:
    eat(String something)方法,看家lookHome方法(无参数)
  •   3.定义猫类继承动物类
    行为:eat(String something)方法,逮老鼠catchMouse方法(无参数)
  •   4.定义Person类
    属性:
    姓名,年龄
    行为:
    keepPet(Dog dog,String something)方法
    功能:喂养宠物狗,something表示喂养的东西
    行为:
    keepPet(Cat cat,String something)方法
    功能:喂养宠物猫,something表示喂养的东西
    生成空参有参构造,set和get方法
  •   5.定义测试类(完成以下打印效果):
    
      keepPet(Dog dog,String somethind)方法打印内容如下:
    年龄为30岁的老王养了一只黑颜色的2岁的宠物
    2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃 keepPet(Cat cat,String somethind)方法打印内容如下:
    年龄为25岁的老李养了一只灰颜色的3岁的宠物
    3岁的灰颜色的猫眯着眼睛侧着头吃鱼

    #我的分析

    •   猫类:颜色,年龄,吃东西(鱼){},抓老鼠(){}
      狗类:颜色,年龄,吃东西(骨头){},看家(){} 人类:姓名,年龄,喂狗(){},喂猫(){} 猫狗有共性,提取一个父类(Pet)
      抽象宠物类:
      颜色,年龄,食物,吃东西(食物);
      猫类:继承宠物类
      狗类:继承宠物类
package com.itheima6;
//抽象宠物类
public abstract class Pet {
private String color;
private int age; public Pet() {} public Pet(String color,int age) {
this.color = color;
this.age = age;
} public String getColor() {
return color;
} public void setColor(String color) {
this.color = color;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public abstract void eat(String food); }
package com.itheima6;
//猫类
public class Cat extends Pet{ public Cat() {} public Cat(String color,int age) {
super(color,age);
} @Override
public void eat(String food) {
// TODO Auto-generated method stub
System.out.println(this.getAge()+"岁的"+this.getColor()+"颜色的"+"猫眯着眼睛侧着头吃"+food);
} public void catchMouse() {
System.out.println("猫抓老鼠");
} }
package com.itheima6;

//狗类
public class Dog extends Pet { public Dog() {
} public Dog(String color, int age) {
super(color, age);
} @Override
public void eat(String food) {
// TODO Auto-generated method stub
System.out.println(this.getAge() + "岁的" + this.getColor() + "颜色的" + "狗两只前腿死死地抱住" + food + "猛吃");
} public void lookHome() {
System.out.println("狗看门");
}
}
package com.itheima6;

//人类
public class Person {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public void keepPet(Pet p, String food) {
if (p instanceof Dog) {
Dog d = (Dog) p;
System.out.println("年龄为" + age + "岁的" + name + "养了一只" + d.getColor() + "颜色的" + d.getAge() + "岁的宠物");
d.eat(food);
} else if (p instanceof Cat) {
Cat c = (Cat) p;
System.out.println("年龄为" + age + "岁的" + name + "养了一只" + c.getColor() + "颜色的" + c.getAge() + "岁的宠物");
c.eat(food);
}
} }
package com.itheima6;

public class Test {
public static void main(String[] args) { Dog d = new Dog("黑", 2);
Person p2 = new Person("老王", 30);
p2.keepPet(d, "骨头"); Cat c = new Cat("灰", 3);
Person p = new Person("老李", 25);
p.keepPet(c, "鱼");
} }

控制台内容

Day_08【面向对象】扩展案例4_年龄为30岁的老王养了一只黑颜色的2岁的宠物……的更多相关文章

  1. Day_09【常用API】扩展案例4_将字符串变为字符数组,并将大写字母改为小写,首尾内容不同互换,并将索引为偶数的元素替换

    分析以下需求,并用代码实现 1.键盘录入一个字符串 2.将该字符串变成字符数组(不能使用toCharArray()方法) 3.将字符数组中的所有大写字母变成小写字母(不能使用toLowerCase() ...

  2. Day_12【集合】扩展案例4_判断字符串每一个字符出现的次数

    分析以下需求,并用代码实现 1.利用键盘录入,输入一个字符串 2.统计该字符串中各个字符的数量(提示:字符不用排序) 3.如: 用户输入字符串 "If~you-want~to~change- ...

  3. Day_11【集合】扩展案例4_删除长度大于5的字符串,删除元素包含0-9数字的字符串

    分析以下需求,并用代码实现 1.定义ArrayList集合,存入多个字符串 如:"ab1" "123ad" "bca" "dadf ...

  4. python面向对象封装案例(附:is和==的区别)

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...

  5. python-面向对象-04_面向对象封装案例

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...

  6. python-面向对象-05_面向对象封装案例 II

    面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...

  7. 面向对象编程案例02--显示地调用父类的__init__()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #面向对象编程案例02--显示地调用父类的__init__() ''' 继承是面向对象的重要特征之一,继承是2 ...

  8. python 面向对象编程案例01

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #面向对象编程案例01 class Behave(): def __init__(self,name): se ...

  9. Python面向对象之面向对象封装案例

    面向对象封装案例 封装 封装是面型对象编程的一大特点 面向对象编程的第一步--将属性和方法封装到一个抽象的类中: 外界使用类创建对象,然后让对象调用方法: 对象方法的细节都被封装在类的内部. 一个对象 ...

随机推荐

  1. three.js obj转js的详细步骤 convert_obj_three.py的用法

    three.js是最近非常流行的一个前端webgl库. js格式的模型文件是three.js中可以直接加载的文件.使用THREE.JSONLoader()直接加载,而不需要引用其它的loader插件. ...

  2. GeoGebra案例(傅里叶级数的方波)

    傅里叶级数介绍:请移步参见这位马大佬的博文 https://www.matongxue.com/madocs/619.html 马大佬中的gif图在我看来是非常直观且有趣的,奈何本人本领实在有限,学习 ...

  3. 彻底弄懂GMT、UTC、时区和夏令时

    前言 格林威治时间.世界时.祖鲁时间.GMT.UTC.跨时区.夏令时,这些眼花缭乱的时间术语,我们可能都不陌生,但是真正遇到问题,可能又不那么确定,不得不再去查一查,处理完可能过段时间又忘记.今天,我 ...

  4. <string>头文件常用成员函数

    之前说过 string和vector一样,也是一种顺序容器,并且它也自带成员函数,用法和vector的成员函数差不多,不过它只能用来存放字符,也就是字符串. 在c++中,<string>基 ...

  5. async,await与task.wait()或task.Result的区别

    你是否曾经与我一样不理解async,await与task.wait()或者task.Result的区别? 接下来,一个Demo让你看出他们之间的区别. static void Main(string[ ...

  6. vue显示富文本

    来源:https://segmentfault.com/q/1010000013952512 用  v-html 属性解决

  7. Windows 挂起进程

    A thread can suspend and resume the execution of another thread. While a thread is suspended, it is ...

  8. ansible一键安装mysql8.0

    ansbile安装: # ansible在CentOS7中需要安装epel仓库 yum install -y epel-release yum install -y ansible 安装有好几种方法, ...

  9. (转)mysql数据库表名批量修改大小写

    由于不用服务器对mysql的表名的大小写敏感要求不一致,经常在出现线上的数据库down到了本地不能运行的情况,贴出一段代码用来批量修改数据库表名大小写. DELIMITER // DROP PROCE ...

  10. Codeforces Round #590

    题目链接:Round #590 题目答案:官方Editorial.My Solution A. Equalize Prices Again 签到题还WA了一发,向上取整有点问题: //my wrong ...