前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java小白翻身 - Java多态的理解,适合新人,通俗易懂

Java小白翻身 - Java多态的理解,适合新人,通俗易懂

作者头像
剽悍一小兔
发布2021-07-21 10:39:11
5220
发布2021-07-21 10:39:11
举报

这一节,我们来看看接口是怎么体现多态的。

步骤 1 体现多态

我们修改一下Application的代码,给接口对象赋值。

代码语言:javascript
复制
private ICustomerService customerService = new CustomerServiceImpl();

CustomerServiceImpl 是 ICustomerService接口的实现类,ICustomerService是父,CustomerServiceImpl 是子,他们有一种父子关系。父类的引用指向子类对象,这个就是多态。

步骤 2 先把项目跑起来

核心代码

代码语言:javascript
复制
Application app = new Application();
//1、读取文本,获取客户资料
List<String> props = app.customerService.loadCustomerFormTxt("D:/customer.txt");
//2、解析客户资料到客户对象
Customer customer = app.customerService.fillCustomer(props);
//3、直接将客户对象保存到Excel中(暂时先不做批量入库了)
boolean isSuccess = app.customerService.saveToExcel(customer,"D:/customer.xls");

if(!isSuccess){
    System.out.println("保存失败,系统出现异常!");
}else{
    //4、将这个对象存入链表,备用
    cstList.add(customer);
}

System.out.print("打印链表---" );
cstList.display();

运行:

image

步骤 3 企业中多态的体现

听说老板曾经在真正的软件公司工作过,这天我跟他请教企业中怎么体现多态了,我看了下我的代码,改了下,然后让我拿去思考。

我看了一下,改动还是挺大的。

1.主类放在了一个包中,所有的类都不推荐放在默认包。

image

2.创建了一个私有方法 saveCustomer,把service对象当做参数传进去。

代码语言:javascript
复制
boolean isSuccess = saveCustomer(app.customerService);

方法如下:

代码语言:javascript
复制
private static boolean saveCustomer(ICustomerService customerService) {
        //1、读取文本,获取客户资料
        List<String> props = customerService.loadCustomerFormTxt("D:/customer.txt");
        //2、解析客户资料到客户对象
        Customer customer = customerService.fillCustomer(props);
        //3、直接将客户对象保存到Excel中(暂时先不做批量入库了)
        boolean isSuccess = customerService.saveToExcel(customer,"D:/customer.xls");

        Application.cstList.add(customer);

        return isSuccess;
    }

步骤 4 关于多态的思考

目前我对于多态的看法,除了父类引用可以指向子类对象以外,就是这个传参的情况。

代码语言:javascript
复制
boolean isSuccess = saveCustomer(app.customerService);

其实本质还是一样的,因为app.customerService的真实对象,还是CustomerServiceImpl,是子类对象。

我想了很久,终于明白了,多态的好处就是:代码未动,设计先行!

比如这个例子,我只是设计了这个接口需要哪些方法。

代码语言:javascript
复制
//加载文本的客户资料
public abstract List<String> loadCustomerFormTxt(String path);

//填充属性到客户对象
//public 和 abstract可以省略
Customer fillCustomer(List<String> props);

/**
 * 保存客户对象到Excel
 * @param cst 客户对象
 * @param excelPath Excel的路径
 * @return
 */
boolean saveToExcel(Customer cst,String excelPath);

我是接口管理员,是设计人员,我觉得这样设计是合理的,可以完成当前的项目需求。那就ok了,写程序就是这样,得先有图纸,然后图纸要评审,评审完成后再交给施工人员去施工。

在这个项目里面,我就是那个设计者,新同事小A是技术落地。

那什么时候需要用到多态呢?我想,应该就是有多人协作,项目比较大的时候,必须要先做好设计!然后,开发人员再根据项目经理写好的接口去做技术实现。

步骤 5 企业现况

“说的不错。”这时候,老板走了过来。

“小白啊,你能悟到这一点,很是难得。没错,多态最核心的意义就是如此,接口的意义就是为了规范开发的代码。”

“那真正的企业里面做项目也有接口管理员吗,是不是也要像这样先做设计?”我激动地问道。

只见老板的脸轻微地抽搐了一下,仿佛想起来各种被烂代码击垮的往事,“这个,小白啊,虽然这样做是最好的。但是很多企业里面,都是以效率优先,也不管到底合不合理,也没有需求和代码评审。都是一个项目分给你,干就完了。”

“......”

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 步骤 1 体现多态
  • 步骤 2 先把项目跑起来
  • 步骤 3 企业中多态的体现
  • 步骤 4 关于多态的思考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档