java多态实例

1 按如下要求开发Java应用

1.1 开发一个食物类Food,具体要求如下:

1.2 具有私有属性:营养值,提供公有的get方法和保护的set方法。

1.3 有一个保护的无参的构造方法,在该方法内营养值由1-10之间的随机数产生

1.4 包含一个公有的获取食物名称的方法:public String getName(){…}

1.5 添加主方法测试

public class Food {
    private double  nutrition;//营养值
    private String name;

    public double  getNutrition() {
        return nutrition;
    }

    public void setNutrition(double nutrition) {
        this.nutrition = nutrition;
    }

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

    protected Food() {
        this.nutrition = ((Math.random() * 9) + 1);
    }
    public String getName() {
        return name;
    }
}


public class FoodText {
    public static void main(String[] args) {
        Food food=new Food();
        double nutrition = food.getNutrition();
        System.out.println(nutrition);
        food.setName("肉");
        String name = food.getName();
        System.out.println(name);

2 分别开发Food类的三个派生类:肉制品类、淀粉类和水果蔬菜类,要求:

2.1 这三个类均显式编写无参的构造方法,并分别对营养值乘1.2 , 0.7 , 0.9 处理;

2.2 这三个类均重写父类的获取食物名称的方法;

2.3 并测试。

public class Meat extends Food {
    private String name;
    public Meat(){
        super.setNutrition(super.getNutrition()*1.2);
    }
    //重写父类的获取食物的名称方法
    @Override
    public String getName() {

        return this.name;
    }

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

public class Starch extends Food {//淀粉
    private String name;
    public Starch(){
        super.setNutrition(super.getNutrition()*0.7);
    }
    //重写父类的获取食物的名称方法
    @Override
    public String getName() {

        return this.name;
    }

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

public class Fruits extends Food {
    private String name;
    public Fruits(){
        super.setNutrition(super.getNutrition()*0.9);
    }
    //重写父类的获取食物的名称方法
    @Override
    public String getName() {

        return this.name;
    }

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


3 开发一个猴子类Monkey,具体要求如下:

3.1 具有私有属性:名称,体重(直接赋初值10.0),两者均提供公有的get方法。

3.2 仅有一个公有的有参构造方法:构造参数参数为名称

3.3 具有一个公有的,参数是Food类型,无返回值的eat(Food food)方法,其功能是吃食物(在控制台打印猴子名称和食物名称等信息),同时体重会增加,体重增加量是:营养值*0.1

3.4 具有一个公有的,无参的,无返回值的game()方法,其功能是游戏(可在控制台打印信息),体重降低0.05,若体重在5以下不再下降。

3.5 重写toString方法

3.6 重写equals方法(注意遵守Java关于重写equals方法的有关规定)

3.7 添加主方法测试。

public class Monkey {
    private String name;
    private double weight = 10.0;

    public Monkey(String name){
        this.name=name;
    }
    public void eat(Food food){
        System.out.println("食物的名称:"+food.getName());
        System.out.println("猴子的名称:"+this.name);
        this.weight +=food.getNutrition()*0.1;
        System.out.println("猴子的体重:"+this.weight);
    }
    public void game(){
        if(this.weight<5){
            System.out.println("太虚弱了,该进食了!!");
            return;
        }
        this.weight -=0.5;
    }
    public String getName() {
        return name;
    }
    public double getWeight() {
        return weight;
    }

    @Override
    public String toString() {
        return "Monkey{" +
                "name='" + name + '\'' +
                ", weight=" + weight +
                '}';
    }
}
public class FoodText {
    public static void main(String[] args) {
       Food food = new Food();
        Monkey monkey=new Monkey("凯撒大帝");
        monkey.eat(food);
        monkey.game();

    }
}

4 开发一个管理类,该类功能如下:

创建20个猴子,每个猴子姓名随机产生,但不允许重名,每个猴子进行100次吃食物和游戏,具体每次吃食物还是游戏是随机的,而且获取食物也是随机的可能是肉制品,水果蔬菜制品和淀粉制品。最后输出20个猴子的名称和体重。注:可以根据需要自由设计该类。

public class MonkeyGama {
    public static void main(String[] args) {
        //创建20个猴子对象
        for (int k=1;k<=20;k++){
            Monkey monkey =new Monkey("凯撒"+k);
            Food food=null;
            for(int j=0;j<100;j++){
                int num=(int)(Math.random()*2+1);//1吃东西2玩游戏
                if(num==1){
                    int num1=(int)(Math.random()*3+1);//1吃肉 2淀粉 3水果
                    if(num1==1){//吃肉
                        food=new Meat();
                        food.setName("肉肉肉");
                        monkey.eat(food);
                    }else if(num1==2){//淀粉
                        food=new Starch();
                        food.setName("淀粉");
                        monkey.eat(food);
                    }else {//水果
                        food=new Fruits();
                        food.setName("水果");
                        monkey.eat(food);
                    }
                    //吃食物信息打印
                    System.out.print(monkey.getName()+"吃:"+food.getName()+"体重:");
                    System.out.printf("%.1f",monkey.getWeight());
                    System.out.println();
                }else {
                    monkey.game();
                    //玩游戏信息打印
                    System.out.print(monkey.getName()+"玩游戏体重:");
                    System.out.printf("%.1f",monkey.getWeight());
                    System.out.println();

                }
            }
        }
    }
}

你可能感兴趣的:(Java,java,多态)