唐僧取经小代码

在这里插入图片描述

package Java_base_study.homework;

public class Homework06 {
    public static void main(String[] args) {
        //实例化Person对象"唐僧",要求一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具
        Horse bailong = new Horse();
        Person tang=new Person("唐僧", bailong);
        tang.passriver();
        tang.ride();
    }
}

interface Vehicles {
    void work();
}

class Horse implements Vehicles {
    @Override
    public void work() {
        System.out.println("使用马");
    }
}

class Boat implements Vehicles {
    @Override
    public void work() {
        System.out.println("使用船");
    }
}

class industry {
    //白龙马不是一直换的,但是船要一直换,static 方法只能调用static 变量,所以白龙马要申明为static
    private static Horse bailong = new Horse();

    //由于是工具类所以方法一般设为static,这样调用方法不用创建方法
    //两个方法分别获得交通工具Horse和Boat
    public static Horse gethorse() {
        return bailong;
    }

    public static Boat getboat() {
        return new Boat();
    }
}

class Person {
    public String name;
    public Vehicles vehicles;

    public Person(String name, Vehicles vehicles) {
        this.name = name;
        this.vehicles = vehicles;
    }
    //这里涉及到一个编程思路,就是可以把具体的要求,封装成方法->这里就是编程思想
    //思考一个问题,如何不浪费,在构建对象时,传入的交通工具对象->动脑筋
    public void passriver(){
        //第一层的想法:既然过河就给艘船呗
//        Boat boat=industry.getboat();
//        boat.work();
        //第二层想法:假如传过来的vehicles是null的该怎么办?
//        if(vehicles==null){
//            //利用多态思想
//            vehicles=industry.getboat();
//        }
//        vehicles.work();
        //第三层想法:上面的那层假如传过来的vehicles是null的还好
        //但是假如传过去的是bailong,那么调用vehicles.work()相当于用白龙马过河,明显不对,需要加上类型判断
        if((vehicles instanceof Horse)){
            vehicles=industry.getboat();
        }
        vehicles.work();
    }
    public void ride(){
        //第一层的想法:既然正常走路就给白龙马呗
//        Horse bailong=industry.gethorse();
//        bailong.work();
        //第二层想法假如传过来的vehicles是null的该怎么办?
        if(vehicles instanceof Boat){
            //利用多态思想
            vehicles=industry.gethorse();
        }
        vehicles.work();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值