做一个饲养员给动物喂食物的例子体现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()); 
    } 
}
目录
相关文章
|
1天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
1天前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类
|
1天前
|
Java
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
5 0
|
6天前
|
安全 Java 机器人
《Java 简易速速上手小册》第2章:面向对象的 Java(2024 最新版)
《Java 简易速速上手小册》第2章:面向对象的 Java(2024 最新版)
19 0
|
7天前
|
Java 开发者
探索 Java 的函数式接口和 Lambda 表达式
【4月更文挑战第19天】Java 中的函数式接口和 Lambda 表达式提供了简洁、灵活的编程方式。函数式接口有且仅有一个抽象方法,用于与 Lambda(一种匿名函数语法)配合,简化代码并增强可读性。Lambda 表达式的优点在于其简洁性和灵活性,常用于事件处理、过滤和排序等场景。使用时注意兼容性和变量作用域,它们能提高代码效率和可维护性。
|
7天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
14 0
Java接口中可以定义哪些方法?
|
9天前
|
设计模式 Java
Java接口与抽象类
Java接口与抽象类
17 0
|
2天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
19 0
|
1天前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
5 0
|
1天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程