zoukankan      html  css  js  c++  java
  • 第6周代码分析

    1.阅读ManagerTest目录中的代码

    1.1绘制UML类图,要体现类之间的关系。

    1.2文件第26行e.getSalary(),到底是调用Manager类的还是Employee类的getSalary方法?

    staff被创建为Employee类,所以e.getSalary()调用的自然是父类Employee类的getSalary(),但是,如果当e引用Manager对象的时候,e.getSalary()调用的是Manger类中的getSalary方法。
    

    1.3Manager类的构造函数使用super调用父类的构造函数实现了代码复用,这样有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?

    代码复用可以使代码更清晰简洁;若把父类构造函数中的相关代码复制粘贴到Manager的构造函数中虽会达到相同的效果,但当需要对父类的构造函数进行修改时,就需要对每一处使用父类的代码的地方进行修改。
    

    1.4该代码中哪里体现了多态的好处?请说明。

    Employee:

    public double getSalary()
       {
          return salary;
       }
    

    Manager:

    public double getSalary()
       {
          double baseSalary = super.getSalary();
          return baseSalary + bonus;
       }
    
    Manager也是雇员,但是manager作为更高层应该得到额外的红利,所以这里体现了多态的好处,既有共同点也有不同点。
    

    2.阅读GuessGame抽象类的设计与使用源代码

    2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法,看起来更复杂,这样的改造到底有什么好处呢?

    抽象类不具有实例化特点,改造前,代码与控制台绑定,只能在控制台输入输出;改造后,就可以在控制台、对话框以及图形界面等输入输出。
    

    2.2 GuessGame(改造后).java中有抽象方法与非抽象方法,你觉得抽象类中什么样的方法应该声明为abstract,什么方法不需要声明为abstract直接实现即可。

    对于某一具有一定关系的类所拥有的共同行为,可以声明为abstract,然后就可以在子类中进行不同的实现方法了;而对于某些类所特有的具体方法,可以不要声明。
    

    2.3 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract等概念进行说明。

    不变:猜数字游戏的本质,都是输入一个数字然后判断随机产生的数和这个数是不是相等;
    变化:改造后的Guess中增加了抽象类和public abstract void print,public abstract void println和public abstract int nextInt三个抽象方法。
    Abstract关键字:
    1)修饰类:不可被实例化,抽象类只能申明引用,不能创建对象;
    2)修饰方法:抽象方法只有声明,没有实现。具体的实现交给继承抽象类的子类;
    3)子类若不想是抽象类,则需要继承父类所有的抽象类。
    
  • 相关阅读:
    蓝鲸财经新闻记者实战培训
    雷军解密小米商业内核
    OpenGL6-纹理动画
    OpenGL5-纹理贴图
    OpenGL4-绘制旋转的立方体
    OpenGL3-绘制各种图元绘制
    OpenGL2-绘制三角形
    OpenGL1-创建窗口(建立Win32的OpenGL开发环境 )(代码上传)
    一步步做程序优化-讲一个用于OpenACC优化的程序(转载)
    常用编译选项介绍
  • 原文地址:https://www.cnblogs.com/lixueting0904/p/9799180.html
Copyright © 2011-2022 走看看