0
点赞
收藏
分享

微信扫一扫

Java面试三大特性——从小美同学的一份麻辣烫开始

小安子啊 2022-04-27 阅读 70

目录

1、小美与麻辣烫的故事

2、场景技术实现

2.1 最终效果图

2.2 奉上源码

3、回头看技术

3.1 封装

3.2 继承

3.3 多态

4、面试官想知道什么


1、小美与麻辣烫的故事

 

小美同学上了一天的课,今天想放松放松吃个麻辣烫,于是在美团外卖上下了一份订单。该订单被分配给了骑手小帅哥,由于配送时长会影响个人绩效,因此小哥以三步并作两步之势,飞快地骑着电动车赶到了店家。

此时老板娘正开始准备小美同学的麻辣烫。

小美所选材料如下:(供参考模仿后果自负~呵呵)
配料:多辣、多麻、盐正常。
配菜:金针菇、鱼丸、鱼豆腐、蟹肉棒、杏鲍菇、猪肝、鹌鹑蛋。

老板娘一看,这美女真会吃~很娴熟地在菜架上为小美挑选完了食材。

准备好食材后开始下锅。5分钟后,一份热气腾腾香味扑鼻的麻辣烫就出炉了。是不是你也开始馋了,别急,学完这篇你再去学校旁边的店里去吃……

 

骑手小哥再次以讯雷不及掩耳之事把餐送到了满怀期待的小美手里。

小哥和小美都很开心:一个绩效达标了;一个及时享受到了美食。

好了,小美吃麻辣烫的故事结束了。

是不是你的心早已飘到麻辣烫店去了…… 赶紧回来!

让我们把思维拉回到本篇的学习主要目的Java面向对象的三大特性讲解。


2、场景技术实现

首先,我们要对前面的场景进行简要梳理,以便为后面的讲解内容做准备。

出场人物:客户小美、骑手小张、麻辣烫店老板娘
剧情道具:一个麻辣烫订单、一个麻辣烫秘方(非独家~哈哈)

我们就从麻辣烫定单本身来聊聊三大特性。

小美要求的微辣微辣可以看着是“封装”和“多态”的体现;盐正常可以看着是对原配料的正常“继承”;

2.1 最终效果图

 

2.2 奉上源码

  美团订单信息:

/**
 * 美团订单信息
 */
public class MeiTuanOrderInfo extends MaLaTangInfo {
    // 订单名称
    private String orderName;
    // 订单用户名称
    private String userName;

    @Override
    protected String massTaste() {
        String s = super.massTaste();
        return "["+userName+"]的订单["+orderName+"]信息: "+s;
    }

    public String getOrderName() {
        return orderName;
    }

    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

  麻辣烫信息:

import java.io.Serializable;

/**
 * 麻辣烫信息(非独家秘方)
 */
public abstract class MaLaTangInfo implements Serializable {

    private Double hotePpper = 1.0; //辣椒 (单位: 两)
    private Double pepper = 1.0; //花椒 (单位: 两)
    private Double salt = 1.0; //咸盐(单位: 两)
    private String taste = "普通";

    // 大众口味
    protected String massTaste() {
        return "辣椒"
                +this.hotePpper + "两,花椒"
                +this.pepper + "两,咸盐"
                +this.salt+"两,口味"+getTaste()
                +";"+featureCheck();
    }

    // 口味判断
    private String getTaste() {
        Double ts = this.hotePpper
                + this.pepper
                + this.salt;
        if (ts > 3.0) {
            return "较重";
        }
        if (ts <= 2.0) {
            return "较轻";
        }
        return taste;
    }

    private String featureCheck(){
        return "\n使用到的Java特性:[口味信息->继承][口味判断->封装]"
                +"[辣椒->"+hotePpperFeature+"]"
                +"[花椒->"+hotePpperFeature+"]"
                +"[盐->"+hotePpperFeature+"]";
    }

    // 三个Feature仅为演示Java特性使用
    private String hotePpperFeature = "继承"; // 辣椒Java特性
    private String pepperFeature = "继承"; // 花椒Java特性
    private String saltFeature = "继承"; // 盐的Java特性

    public Double getHotePpper() {
        return hotePpper;
    }

    public void setHotePpper(Double hotePpper) {
        this.hotePpper = hotePpper;
    }

    public Double getPepper() {
        return pepper;
    }

    public void setPepper(Double pepper) {
        this.pepper = pepper;
    }

    public Double getSalt() {
        return salt;
    }

    public void setSalt(Double salt) {
        this.salt = salt;
    }

    public String getHotePpperFeature() {
        return hotePpperFeature;
    }

    public void setHotePpperFeature(String hotePpperFeature) {
        this.hotePpperFeature = hotePpperFeature;
    }

    public String getPepperFeature() {
        return pepperFeature;
    }

    public void setPepperFeature(String pepperFeature) {
        this.pepperFeature = pepperFeature;
    }


    public String getSaltFeature() {
        return saltFeature;
    }

    public void setSaltFeature(String saltFeature) {
        this.saltFeature = saltFeature;
    }
}

 测试类:

public class TestMaLaTang {
    public static void main(String[] args) {
        getOrderInfo("小美", "麻辣烫", 1.0, 1.0, null);
        getOrderInfo("小东", "麻辣烫", 2.0, null, 1.0);
        getOrderInfo("小宝", "麻辣烫", 4.0, 0.0, 0.0);
        getOrderInfo("小讯", "麻辣烫", null, 1.0, 0.0);
    }

    private static void getOrderInfo(String userName, 
                                     String orderName, 
                                     Double hotePpper, 
                                     Double pepper, 
                                     Double salt) {
        MeiTuanOrderInfo meiTuanOrderInfo = new MeiTuanOrderInfo();
        meiTuanOrderInfo.setOrderName(orderName);
        meiTuanOrderInfo.setUserName(userName);
        if(null != hotePpper) {
            meiTuanOrderInfo.setHotePpperFeature("多态");
            meiTuanOrderInfo.setHotePpper(hotePpper);
        }
        if(null != pepper) {
            meiTuanOrderInfo.setPepperFeature("多态");
            meiTuanOrderInfo.setPepper(pepper);
        }
        if(null != salt) {
            meiTuanOrderInfo.setSaltFeature("多态");
            meiTuanOrderInfo.setSalt(salt);
        }
        System.out.println(meiTuanOrderInfo.massTaste()+"\n");
    }

}

3、回头看技术

故事看完了,估计你的麻辣烫也吃完了,现在需要开启属于你自己的思考空间了。以下问题答案建议给自己几秒思考时间~~ 因为你思考后的结果才是真正属于你自己的

3.1 封装

    1) 体现在三个方面:属性->方法->类。(思考几秒)

    2) 隐藏细节:修饰为private或仅暴露接口方法,使代码更安全以及外部只关注核心业务逻辑即可。(思考几秒)

3.2 继承

1)体现在两个方面:父类属性->父类方法。(思考几秒)

 2) 继承关系常用的关键字:extends
        说明:如果我们定义的类没有显式继承某个类,系统默认为我们继承Objects。

  3)提高了代码的复用性和可扩展性。(思考几秒)

3.3 多态

 1)多态的三个必要条件是:A、有继承或实现关系 B、有方法的重写 C、父类引用指向子类对象

2)常见关键字:重写override。

3)提高程序的扩展性。父类可实现公共部分、由子类完成个性化部分。(例如麻辣烫的信息)
4) 父类不能使用子类的特有成员。通常解决方案通过向下转型:格式为子类型 对象名 = (子类型)父类引用;

4、面试官想知道什么

   这才是大名鼎鼎的江湖四剑客(小美、小宝、小东和小讯) 内心的真实想法。 

1)入门基础-考察基本功

2)与其他编程语言的优劣对比-考察知识面的广度

3)站在Java这门语言视角思考-考察看问题的高度

举报

相关推荐

0 条评论