2019/12/24   |    在校大二上学期    |    太原科技大学

初学java后,我们会发现java难点不在于Java语法难学,而是把我们挂在了如何设计类的“吊绳”上了。这恰恰也是小白与入职多年的程序员的的差距之一。所以今天来分享一下我的观点:

那么如何设计类呢?有没有遵循的原则可言呢?答案呢,就是下面的叙述!

面试官:“请你用C++/java/Python等语言以面向对象的方式,设计一个在console上运行的计算器。”

面试者埋头10分钟,写出了实现计算器功能的程序。 这里呢,程序就不往上弄了。但是小鸟写的程序大概是这样子的:一个class、一个main方法和一连串的代码,从头到尾就有一个类和一个主方法。但是这不利于后期运维,并且可拓展性很差。

所以,分"类"设计实现功能分装变得尤为重要。设计思路如下:

计算器最基本的功能为 :+ - * / 。可以将加减乘除分别写一个类,都去继承Operation类(父类)。那么如何给用户一个给好的操作方法呢?那么就得在设计一个类(OperationCompany类)。而这个类比较特殊,主要负责用户输入什么运算,就new 什么对象。 什么意思呢? 比如说,用户想实现乘法这个运算,那么在用户输入乘号*后,这个类的方法就会以乘法类为模板,new一个乘法类对象出来,从而去调用乘法的类方法。这种模式叫做简单工厂原则。

其中,加减乘除分开设计就体现了封装这一特性,而Operation(父类)的子类(加减乘除)就体现了子类的多态性。俗称“一龙生九子,九子各不同”,正是这个道理;而子类继承父类Operation类是继承所在。所以在编程中边品边思考,才会信手拈来高质量的代码行。

转载注明出处:  https://www.cnblogs.com/TreasureBoy-blog/

java 入门如何设计类的更多相关文章

  1. Java入门基础(类)

    类 在Java中表示自定义的数据类型,一个class可以是若干基本类型的组合. public class Student { public String id;//学号 public String n ...

  2. java入门---对象和类&概念详解&实例

        Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载     这篇文章,我们主要来看下: 对象:对象是类的一个实例(对象不是找个女朋友),有状态 ...

  3. Java入门之File类和IO流

    1.File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作 . 构造方法: public File(String pathname) :通过将 ...

  4. Java入门基础(类的方法)

    方法 1.添加方法 方法表示一个类能做什么.在Java里,方法和属性属于对等的术语,在一个类中,不仅可以添加属性,还可以添加方法. 类 { 属性:描述“我有什么” 方法:描述“我能做什么” } 例子: ...

  5. Java入门篇(六)——类和对象

    写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...

  6. 设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。

    设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”,则抛出一个异常信息“This is a XYZ”,如果从命令行输入 ABC,则没有抛出异常.(只有 ...

  7. Java入门(一)——类、抽象类和接口

    Java是一门面向对象语言,可以看出"对象"在Java有着举足轻重的位置.那么,"对象"从何而来呢?那必须是丈母娘造出来的,下面我们就先来说说这个丈母娘--类. ...

  8. Java集合为什么设计为:实现类继承了抽象类,同时实现抽象类实现的接口

    更好阅读体验:Java集合为什么设计为:实现类继承了抽象类,同时实现抽象类实现的接口 问题 Java集合源码为什么设计为:「实现类继承了抽象类,同时实现抽象类实现的接口?」 看着List 集合的UML ...

  9. java入门学习笔记之1(类的定义,代码的编译执行)

    这篇文章讲解Java代码的基本执行过程 我们先抛开各种JAVA IDE,开发工具,只使用文本编辑器,以突出最本质的东西. 在Linux环境下,我们编辑一个文件: vim HelloWorld.java ...

随机推荐

  1. jade 的 考古

    Jade是一款高性能简洁易懂的模板引擎(加上这两个字我想起了发动机,为什么不直接叫发动机呢), Jade是Haml的Javascript实现, 在服务端(NodeJS)及客户端均有支持. haml 是 ...

  2. FreeImage 结合 VB6 使用技巧

    1.图片(Bitmap)改变为32位使用FreeImage_ConvertColorDepth函数.图片半透明绘制需要图片(Bitmap)是32位的. 2.图片(Bitmap)的半透明绘制使用函数:F ...

  3. Kdenlive-简单的操作

    版权声明:原创文章,未经博主允许不得转载 前章:https://www.cnblogs.com/weilinfox/p/12246123.html 尽管是简单操作,但内容比较多.可以一边自己尝试编辑一 ...

  4. hash算法与拉链法解决冲突

    <?php class HashNode { public $key; public $value; public $nextNode; public function __construct( ...

  5. vuex之Mutation(三)

    说明 既然我们可以取出数据,就可以修改数据,而修改数据并不是像修改data的数据一样,直接 this.xxx = xxx,这样有一个问题,在实际开发中,state的数据一般会多个组件共享,如果可以使用 ...

  6. k8s-dashboard的部署与卸载

    相对于枯燥的命令行管理,控制台的管理方式相对就显得更加直观便捷了,虽然官方的dashboard有点不太好用,但是作为免费的dashaboard还是可以体验一番的,下面开始部署这个难用的dashboar ...

  7. ROS机器人之话题(一)

     将消息发布到话题上 首先建立一个basic包(名称自己定)其命令为: 1.创建功能包,应用catkin_create_pkg命令     cd  ~/catkin_ws/src #切换到代码空间,也 ...

  8. LUA学习笔记(第1-4章)

    需要一种简单的脚本语言来代替批处理,它需要足够小巧,同时功能上也应该足够强劲,自然选择了LUA语言. 第一章 Hello World print('Hello World') print(" ...

  9. VC简单操作mysql

    #include <iostream> #include <winsock.h> #include <mysql.h> #pragma comment(lib, & ...

  10. uredis ------ 异步 redis 封装的访问库(c++),基于hiredis.

    详见 github : https://github.com/uniqss/uredis 底层使用hiredis库,使用libuv库. 只支持异步 支持分表分库,一般是用玩家的ID去取模,比如分库10 ...