使用抽象类和接口设计宠物店

1. 分析宠物店种的类与方法

宠物:狗,猫,鸭子
宠物属性:有名字,健康值
狗类的属性:狗还有种类
方法:都会叫,都会简绍自己

鉴于它们都会叫和简绍,所以可以用接口或者抽象类来实现方法

2.代码如下:

定义抽象类,内含声音方法,j简绍方法

package petshop;

public abstract class  Function {
    abstract void sound() ;
    abstract void speak();
}

定义宠物类,内含宠物姓名,宠物健康值

package petshop;

public class Pets extends Function {
    private String name ;
    private int healthIndex;

    public Pets() {
        this("无名氏",80);
    }

    public Pets(String name, int healthIndex) {
        this.name = name;
        this.healthIndex = healthIndex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHealthIndex() {
        return healthIndex;
    }

    public void setHealthIndex(int healthIndex) {
        this.healthIndex = healthIndex;
    }

    @Override
    void sound() {

    }

    @Override
    void speak() {
        System.out.println("我的名字是:"+this.name+"我的健康值是:"+this.healthIndex);
    }
}

定义狗类,内包含狗类别和继承父类宠物类

package petshop;

public class Dog extends Pets {
    private String  kinds;

    public Dog() {
        super();
        this.kinds = "品种未知";
    }

    public Dog(String name, int healthIndex, String kinds) {
        super(name, healthIndex);
        this.kinds = kinds;
    }

    public String getKinds() {
        return kinds;
    }

    public void setKinds(String kinds) {
        this.kinds = kinds;
    }

    @Override
    public void sound() {
        System.out.println("汪汪汪");
    }

    @Override
    public String toString() {
        return super.toString()+",我的品种是:"+kinds;
    }
}

Duck 类

package petshop;

public class Duck extends Pets {
    public Duck() {
    }

    public Duck(String name, int healthIndex) {
        super(name, healthIndex);
    }

    @Override
    public void sound() {
        System.out.println("嘎嘎嘎");
    }
}

Cat类

package petshop;

public class Cat extends Pets {
    public Cat() {
    }

    public Cat(String name, int healthIndex) {
        super(name, healthIndex);
    }

    @Override
    public void sound() {
        System.out.println("喵喵喵");
    }
}

PetsShop类 其中包括商店进宠物,还有随机给顾客简绍宠物

package petshop;

import java.util.Random;
import java.util.Scanner;

public class PetShop {
    static Pets pet[] = new Pets[3];
    static PetShop petShop = new PetShop();

    static Scanner scanner = new Scanner(System.in);

    static String name[] = new String[3];
    static int healthIndex[] = new int[3];
    static String kinds[] = new String[3];

    public static void main(String[] args) {
        String str = new String();
//进货
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入Dog/Cat/Duck");
            str = scanner.next();
            if (str.equalsIgnoreCase("dog")) {
                System.out.println("请输入第" + (i + 1) + "只宠物的名字");
                name[i] = scanner.next();
                System.out.println("请输入第" + (i + 1) + "只宠物的健康指数");
                healthIndex[i] = scanner.nextInt();
                System.out.println("请输入第" + (i + 1) + "只宠物的种类");
                kinds[i] = scanner.next();
                petShop.pet[i] = new Dog(name[i], healthIndex[i], kinds[i]);
            } else if(str.equalsIgnoreCase("duck")){
                System.out.println("请输入第" + (i + 1) + "只宠物的名字");
                name[i] = scanner.next();
                System.out.println("请输入第" + (i + 1) + "只宠物的健康指数");
                healthIndex[i] = scanner.nextInt();
                petShop.pet[i] = new Duck(name[i], healthIndex[i]);
            }else if (str.equalsIgnoreCase("cat")){
                System.out.println("请输入第" + (i + 1) + "只宠物的名字");
                name[i] = scanner.next();
                System.out.println("请输入第" + (i + 1) + "只宠物的健康指数");
                healthIndex[i] = scanner.nextInt();
                petShop.pet[i] = new Cat(name[i], healthIndex[i]);
            }else {
                System.out.println("输入错误!!");
            }

        }
            for (int i = 0; i < 3; i++) {
            //随机选择宠物
            int index = new Random().nextInt(petShop.pet.length);
            Pets pet = petShop.pet[index];

            //宠物开始自我介绍
            pet.speak();

            //我给你唱歌
            pet.sound();
        }
    }
}

3.接口实现

将抽象类换成接口,方法不用实现,谁调用接口谁实现方法,可以将sound()与speak()分成两个接口,使其复用性更强。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容