做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处

简介:

做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处

interface Animal{              //动物的接口
    public void eat(Food food);  //接口中只有抽象的方法和静态常量!这里void前面省略了abstract。同样,变量可以省略static final
}
class Cat implements Animal  //一种动物类:猫 

    public void eat(Food food)  //这里是对上面的接口中已经有的方法进行了覆盖也叫重写,这一步是必须的!
    { 
      System.out.println("小猫吃"+food.getName()); 
    } 
}
class Dog implements Animal  //一种动物类:狗 

    public void eat(Food food)  //覆盖
    { 
      System.out.println("小狗啃"+food.getName()); 
    } 
}
abstract class Food  //食物抽象类 。抽象类不能创建对象,这和C++一样 

    protected String name; 
    public String getName() { 
      return name; 
    } 
    public void setName(String name) { 
      this.name = name; 
    } 
}
class Fish extends Food  //一种食物类:鱼,继承了Food类

   public Fish(String name) {    //构造函数
      this.name = name; 
    } 
}

class Bone extends Food  //一种食物类:骨头,继承了Food类
{  
   public Bone(String name) {     //构造函数
      this.name = name; 
    } 
}
class Feeder  //饲养员类 ,这是个很一般的类。。。
{  
    public void feed(Animal animal,Food food)  //饲养员给某种动物喂某种食物 
    { 
      animal.eat(food); 
    } 
}
public class TestFeeder  //测试饲养员给动物喂食物 

    public static void main(String[] args) {     //这里顺便说下,只有在public类中才有main函数!一个这样的程序中也只有一个public类!
      Feeder feeder=new Feeder(); 
      Animal animal=new Dog();      //animal引用Dog类对象
      Food food=new Bone("肉骨头");  //这里创建父类引用子类对象,用food引用Bone对象
      feeder.feed(animal,food);  //给狗喂肉骨头 
      animal=new Cat();  //这里又将animal引用Cat类的对象
      food=new Fish("鱼");  //同样,用food引用Fish类对象,这和上面一样,充分体现了food和 animal只是两个方便引用的名称,是通过这两个名称来引用对象的
      feeder.feed(animal,food);  //给猫喂鱼 
    } 
}
/*接口和继承有什么相似和不同,我只是模糊的了解一些,却说不太出来,也希望老师在讲解这部分的时候能详细些。至于java中的继承和C++的继承一比较,会发现JAVA只
支持单继承,即只能继承一个父类,而c++却能继承多个父类!但通过接口,java可以实现多个接口,接口也可以继承接口。

ps:将上面的题目接口的部分改成继承也是可以的,很容易。。。如下
abstract class Animal{             
    public abstract void eat(Food food); 
}
class Cat extends Animal 

    public void eat(Food food) 
    { 
      System.out.println("小猫吃"+food.getName()); 
    } 
}
class Dog extends Animal 

    public void eat(Food food) 
    { 
      System.out.println("小狗啃"+food.getName()); 
    } 
}
目录
相关文章
|
11天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
2天前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
18 1
|
12天前
|
Java
java线程接口
Thread的构造方法创建对象的时候传入了Runnable接口的对象 ,Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要干的任务。 Runnable的对象称之为:线程任务对象 不是线程对象 必须要交给Thread线程对象。 通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行Runable实现类对象中的run里面的内容。
29 1
|
18天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
44 4
|
22天前
|
Java
Java基础(13)抽象类、接口
本文介绍了Java面向对象编程中的抽象类和接口两个核心概念。抽象类不能被实例化,通常用于定义子类的通用方法和属性;接口则是完全抽象的类,允许声明一组方法但不实现它们。文章通过代码示例详细解析了抽象类和接口的定义及实现,并讨论了它们的区别和使用场景。
|
6月前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
49 3
|
6月前
|
Java 程序员 编译器
【详识JAVA语言】面向对象程序三大特性之二:继承
【详识JAVA语言】面向对象程序三大特性之二:继承
68 2
|
5月前
|
Java 开发者
Java 面向对象新视界:揭秘子类如何“继承”父类精华,再添“创新”之笔
【6月更文挑战第16天】在Java的面向对象世界,子类继承父类的特性,如`Circle`继承`Shape`,展示“is-a”关系。子类不仅保留父类的`color`和`display`方法,还添加了`radius`属性及定制的显示逻辑。这种继承与创新允许代码复用,增强灵活性和可扩展性,使得构建复杂系统变得更加高效和模块化。通过持续的继承与定制,开发者能构建出一系列独具特色的类,充分展现面向对象编程的力量。
152 57
|
4月前
|
Java 编译器
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
|
5月前
|
Java 数据安全/隐私保护 开发者
Java是一种完全支持面向对象编程的语言,其面向对象特性包括封装、继承、多态和抽象等
【6月更文挑战第18天】**面向对象编程(OOP)通过对象封装状态和行为,实现问题域的抽象。Java全面支持OOP,核心特性包括**: - **封装**:保护数据安全,隐藏内部细节。 - **继承**:子类继承父类属性和行为,促进代码重用。 - **多态**:一个接口多种实现,增强灵活性和扩展性。 - **抽象**:通过接口和抽象类抽离共性,简化复杂性。 **Java的OOP便于理解和解决复杂系统问题。**
60 3