一、需求:对猫跟狗进行训练,加入跳高功能,采用抽象类和接口实现,并创建测试类测试

二、分析:

1.定义接口(Jummping)

成员方法 跳高();

/*定义跳高接口
* */
public interface Jumpping {
  public void jump();
}

2.定义抽象动物类(Animal)

成员变量为姓名,年龄;无参有参构造方法;成员方法:get/set方法,eat()

/*定义抽象类
* */
public abstract class Animal {
  private String name;
  private int age;
  //定义无参构造方法
  public Animal(){}
  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 Animal(String name ,int age){
      this.age= age;
      this.name= name;
  }
  //定义成员方法
  public abstract void eat();
  }

3.定义具体猫类(cat),继承动物类,实现跳高接口

无参有参构造方法;成员方法 重写 eat()、jump();定义特有方法 play()

/*定义具体猫类继承动物类
* */
public class Cat extends Animal implements Jumpping {
  public Cat() {
  }
  public Cat(String name,int age) {
      super(name,age);
  }
  //重写吃饭方法
  @Override
  public void eat() {
      System.out.println("猫吃饭");
  }
  @Override//重写接口方法
  public void jump() {
      System.out.println("猫跳高");
  }
  //定义成员方法
  public void play() {
      System.out.println("玩耍");
  }
}

4.定义具体狗类(dog),继承动物类,实现跳高接口

无参有参构造方法;成员方法 重写 eat()、jump();定义特有方法 play()

/*定义具体狗类,继承抽象动物类
* */
public class Dog extends Animal implements Jumpping {
  //定义无参构造方法
  public Dog() {
  }
  //定义有参构造方法
  public Dog(String name, int age) {
      super(name,age);
  }
  //定义成员方法
  public void play() {
      System.out.println("狗玩耍");
  }
  //重写接口方法
  @Override
  public void jump() {
      System.out.println("狗跳高");
  }
  //重写吃饭方法
  @Override
  public void eat() {
      System.out.println("狗吃肉");
  }
}

5.定义测试类(AnimalDemo)测试


/*动物测试类
* */
public class AnimalDemo {
  public static void main(String[] args) {
      //使用多态创建猫类对象
//       Animal a = new Cat();
//       a.name = "小猫";
//       a.age = 18;
//       System.out.println(a.name + a.age);
//       a.eat();
//       向下转型,调用猫类特有方法
//       Cat c = (Cat) a;
//       c.jump();
//       c.play();
//     创建对象调用猫类
      Cat c=new Cat("加菲",18);
      System.out.println(c.getName()+c.getAge());
      c.eat();
      c.jump();
      c.play();
      System.out.println("--------------------------------------------");
//     创建对象调用猫类
      Dog d = new Dog();
      d.setName("小狗");
      d.setAge(180);
      System.out.println(d.getName()+d.getAge());
      d.eat();
      d.jump();
      d.play();
  }
}

Java案例——猫与狗(接口版)的更多相关文章

  1. java基础(四)-----抽象类与接口

    抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们 ...

  2. 3、java基础:抽象类与接口的区别

    抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样 ...

  3. Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化

    知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...

  4. Java第一篇:为什么是接口?

    好家伙, 写了一道Java作业:    一道简单的接口练习题   而答案也比较简单 public class Demo1 { public static void main(String[] args ...

  5. 黑马程序员——JAVA基础之抽象和接口 , 模版方法设计模式

    ------- android培训.java培训.期待与您交流! ---------- 抽象定义:           抽象就是从多个事物中将共性的,本质的内容抽取出来.           例如:狼 ...

  6. 【深度学习】keras + tensorflow 实现猫和狗图像分类

    本文主要是使用[监督学习]实现一个图像分类器,目的是识别图片是猫还是狗. 从[数据预处理]到 [图片预测]实现一个完整的流程, 当然这个分类在 Kaggle 上已经有人用[迁移学习](VGG,Resn ...

  7. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  8. java编程思想第九章接口

    9.1抽象类和抽象方法 为什么要有抽象类? 是希望通过通用接口操作一系列类. 那么抽象类的形式是什么样的呢? 声明类的使用使用abstract关键字,且在该类中应该具有抽象方法. 注:抽象方法被关键字 ...

  9. [置顶] 我的 Java 后端书架 (2016 年暖冬版)

    转自:  http://calvin1978.blogcn.com/articles/bookshelf16.html 我的 Java 后端书架 (2016 年暖冬版) 本书架主要针对 Java 后端 ...

随机推荐

  1. Mac搭建Git服务器—开启SSH

    SSH开启 在osx中开启ssh访问非常简单,只需要打开"系统偏好设置"并且点击"共享"图标即可. 选中下图中的check box即允许远程登陆.server处 ...

  2. Ansible之playbook剧本

    Ansible之playbook剧本 目录 Ansible之playbook剧本 1. playbook的组成 2. 剧本示例test1 2.1 剧本制作 2.2 准备http.conf 2.3 运行 ...

  3. Redis 学习笔记(六)Redis 如何实现消息队列

    一.消息队列 消息队列(Messeage Queue,MQ)是在分布式系统架构中常用的一种中间件技术,从字面表述看,是一个存储消息的队列,所以它一般用于给 MQ 中间的两个组件提供通信服务. 1.1 ...

  4. Windows安装MySQL5.7解压版

    1. 解压后根目录添加配置文件my.ini [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [ ...

  5. 05.python语法入门--垃圾回收机制

    # (1)垃圾回收机制GC# 引用计数# x = 10 # 值10引用计数为1# y = x   # 值10引用计数为2## y = 1000 # 值10引用计数减少为1# del x     # 值 ...

  6. linux 普通分区与lvm分区

    安装linux系统时 有时候会提示lvm分区与标准分区 首先普及一下lvm分区:lvm是 logical volume manager (逻辑卷管理),linux环境下对磁盘分区的管理:他解决了安装系 ...

  7. 基于node的tcp客户端和服务端的简单通信

    1.简单介绍下TCP/IP TCP/IP是互联网相关协议的集合,分为以下四层:应用层.传输层.网络层.数据链路层. 分成四层的好处是,假如只有一层,某个地方需要改变设计时,就必须把所有整体替换掉,而分 ...

  8. awvas启动不起来解决方案

    当双击桌面的"Acunetix图标",自动打开浏览器跳转页面,结果页面显示"无法访问此网站"按Windows+R键输入services.msc打开服务界面查看A ...

  9. kali linux 安装lanmp遇到的问题

    安装LANMP步骤(需要ROOT权限)2020版本以上的Linux kali需要百度参考修改权限得文章 root@kali:~# wget http://dl.wdlinux.cn/files/lan ...

  10. 匿名函数 =匿名方法+ lambda 表达式

    匿名函数的定义和用途 匿名函数是一个"内联"语句或表达式,可在需要委托类型的任何地方使用. 可以使用匿名函数来初始化命名委托[无需取名字的委托],或传递命名委托(而不是命名委托类型 ...