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. 【javaScript】报getElementId()为Null的错误

    若JavaScript代码写在<head>块中,若是javaScript,写JavaScript代码写在里面 window.οnlοad=function(){ js代码内容 } 若是jq ...

  2. 编写python程序读入1到100之间的整数,然后计算每个数出现的次数,输入0表示结束输人,输入数据不包括0。如果数出现的大现如果大于1,输出时使用复数times

    #-*- coding:UTF-8 -*- #环境:python3 print("Enter the numbers between 1 and 100:") enterList= ...

  3. HGE引擎改进——2014/3/4

    2014/3/4 更新 1.提升资源包管理效率 2.Show库整合.目前Show库有Picture.Frame.Animation和Particle类,以及PictureData和ParticleSy ...

  4. OpenCV2.4.13+VS2013配置方法

    先说一下vc几代表的对应版本: vc8 = Visual Studio 2005 vc9 = Visual Studio 2008 vc10 = Visual Studio 2010 vc11 = V ...

  5. 使用dlib基于CNN(卷积神经网络)的人脸检测器来检测人脸

    基于机器学习CNN方法来检测人脸比之前介绍的效率要慢很多 需要先下载一个训练好的模型数据: 地址点击下载 // dlib_cnn_facedetect.cpp: 定义控制台应用程序的入口点. // # ...

  6. UML--> plantUML安装

    plantUML安装 因为基于intellid idea,所以第一步自行安装. setting->plugins 搜索plantUML 安装完成后,重启idea 会有如下显示 安装Graphvi ...

  7. 深入理解JDK中的Reference原理和源码实现

    前提 这篇文章主要基于JDK11的源码和最近翻看的<深入理解Java虚拟机-2nd>一书的部分内容,对JDK11中的Reference(引用)做一些总结.值得注意的是,通过笔者对比一下JD ...

  8. CentOS 7 上CNVnator安装

    1.到github上下载最新版本 https://github.com/abyzovlab/CNVnator/releases 2.先看INSTALL文件,要求以下依赖,我的机器上已经安装了前两个,所 ...

  9. 优雅地关闭worker进程

    关闭nginx两种方式 nginx -s stop  立即停止nginx进程  nginx -s quit 优雅地关闭worker进程 开始优雅的关闭worker进程后 01设置定时器 worker_ ...

  10. 使用nginx构建一个具备缓存功能的反向代理服务器

    上游服务一般不提供公网访问. upstream模块,名字叫local 这个时候访问,都是由反向代理服务处理返回的. 有了反向代理服务后,拿变量和值会出错,tcp是有对端地址的,反向代理与客户端是一个t ...