假设动物园只有猫和狗两类动物,猫吃小鱼,狗吃骨头,饲养员喂猫的时候猫会“喵喵喵”的叫,喂狗的时候狗会“汪汪汪”的叫。
根据需求,可以分为六个类文件,动物类,猫类,狗类,食物类,饲养员类,测试类
本实例主要是为了练习JAVA面向对象的继承思想。
本实例总共分为六个类文件,总体结构如下图:
以下是六个文件的代码,因为本人菜,加了详细的注释,如果有误,请在评论区指出,我会及时改正。
Animal.java
//创建抽象类Animal,
public abstract class Animal {
//声明私有对象name
private String name;
//创建构造方法
public Animal(String name) {
//设置成员变量
this.name=name;
}
//声明两个抽象方法,只允许声明,不允许实现
public abstract void shout();
public abstract void eat(Food food);
//因为使用了private进行封装对象,所以需要setget方法。
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Feeder.java
//创建Feeder类
public class Feeder {
//声明对象name
public String name;
//创建构造方法
public Feeder(String name) {
this.name=name;
}
//创建没有返回值的方法speak,用来输出提示信息
public void speak() {
System.out.println("欢迎来到动物园!");
System.out.println("我是饲养员"+getName());
}
//创建没有返回值的方法feed
public void feed(Animal a,Food food) {
a.eat(food);
}
//因为使用了private进行封装对象,所以需要setget方法。
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
}
Food.java
//创建Food类
public class Food {
//使用private声明私有对象name
private String name;
//因为name对象使用private进行封装,所以要用setget方法
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
}
Cat.java
//创建Cat类并用extends继承父类Animal
public class Cat extends Animal {
//创建构造方法
public Cat(String name) {
//使用super调用父类中的构造函数name
super(name);
}
//创建没有返回值的方法shout,输出猫的叫声
public void shout() {
System.out.print("喵喵喵~~~");
}
//创建没有返回值的方法eat,输出猫吃东西的行为
public void eat(Food food) {
System.out.println(getName()+"正在吃着香喷喷的"+food.getName());
}
}
Dog.java
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void shout() {
System.out.print("汪汪汪~~~");
}
public void eat(Food food) {
System.out.println(getName()+"正在吃着香喷喷的"+food.getName());
}
}
Test.java
//创建Test测试类
public class Test {
//声明main方法
public static void main(String[] args) {
//创建feeder对象并赋值
Feeder feeder =new Feeder("小花");
//调用feeder中的speak方法
feeder.speak();
//创建dog对象并赋值
Dog dog = new Dog("小狗");
//调用dog中的shout方法
dog.shout();
//创建food对象
Food food = new Food();
//为food对象添加属性
food.setName("骨头");
//调用feeder中的feed方法
feeder.feed(dog, food);
//创建cat对象并赋值
Cat cat = new Cat("小猫");
//调用cat中的shout方法
cat.shout();
//为food对象添加属性
food.setName("小鱼");
//调用feeder中的feed方法
feeder.feed(cat, food);
}
}