zoukankan      html  css  js  c++  java
  • 201521123034《Java程序设计》第4周学习总结

    1. 本周学习总结

    1.1 尝试使用思维导图总结有关继承的知识点。

    1.2 使用常规方法总结其他上课内容。

    1.对类的设计:
                - 将属性设计为私有
                - 对属性初始化
                - 类名和方法名要能体现他们的职责
    2.识别类: 
                - 在一段故事中寻找到名词——创建相应的类
                - 在一段故事中寻找到动词——建立方法
    3.文档注释:
                - 注释以/*开始,以*/结束
    4.继承:(extends)  
                - 被继承的类称为父类
                - 继承父类的类称为子类
                - 继承时子类将获得父类的属性与方法,并具有自身特有的属性与方法。
    5.多态:
                - 相同的形态,不同的行为(不同的定义)
                - 相同的方法名,不同的实现(父类类型变量可以引用子类对象)
                - 通过 instanceof 可以判断父类引用所引用的对象实例的实际类型
    6.抽象类:
                - 用abstract关键字来修饰一个类时,该类叫做抽象类;
                - 抽象类必须被继承。
                - 抽象类不能被直接实例化。
    

    参考资料:

    百度脑图
    XMind

    2. 书面作业

    1.注释的应用
    使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)

    对方法的注释
    ![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170315155044979-435155722.png) ![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170315155107416-1140318816.png)
    对类的注释
    ![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170315155150245-206678825.png) ![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170315155157745-1967244637.png)

    面向对象设计(大作业1,非常重要)
    2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)

    答:网上商城购物:购物者在首先在首页浏览信息查询想要买的商品,查看商品的信息,包括商品价钱库存,还能浏览之前购买过该商品的买家的评论,接着登录会员(非会员要注册),登录成功后返回商品页面添加商品,添加后商品将会出现在购物车中,买家能在购物车中添加或删减想要买的数量,填写收货地址,最后提交订单,确认后付钱。
    

    2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。

    答:买家使用这个系统。(1)类:商品 属性:商品价钱、规格大小、库存量。(2)类:订单 属性:商品数量 方法:增添删除数量 (3)类:送货地址 属性:地址 方法:增加删除修改地址 (4)账户:用户名、密码 方法:注册账号、更改账号信息。
    
    

    经老师提醒后修改了类图。在设计类时使用继承要谨慎,谨记is-a 这个关系

    2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)
    参考资料:
    UML类图
    面向对象案例-借款者姓名地址.zip

    ManagerTest.zip代码分析
    分析ManagerTest.zip中的代码,回答几个问题:
    3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。

    employee 为父类
    ![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170316213341948-18639289.png)
    manager 为子类
    ![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170316214212385-850964562.png)

    3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?

    答:根据调用该方法的实际对象的类型来决定选择调用哪个方法。
    

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

    (已修改)
    ``` 答:从代码运行结果可以看到,staff[0}调用的是Manager的getsalary方法,staff[1]和staff[2]调用的是employee的getsalary方法。这是由于程序运行中根据对象声明类型来调用相应的方法(动态绑定)。 ``` **3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?** 答:~~使用super调用父类的构造函数实现代码复用,减少代码的数量,避免代码冗余~~
    修改:
    ``` 百度查询了一下DRY原则,即Don't repeat yourself,用自己的话来说就是程序中不要重复使用代码,这样做能达到提高工作效率,节省维护成本的目的。 ``` **Object类** **4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?** ![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170316225309245-2007903561.png) ``` 答:调用Fruit的toString()的方法;该代码是来自默认继承的父类Object;public String toString()返回该对象的字符串表示。 ``` **4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)**

    (1)调用新增的toString方法。
    

    (2)若要同时复用其父类,只要加上super.+父类方法,就能使用父类的方法。
    

    4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)

    答:(1)从object的源代码中可以看到其eqauls方法,功能是用来比较两个对象是否相等,相等则返回true,否则返回faulse。
    
    答:(2)编写一个equals方法覆盖父类(代码截图如下)
    
    

    4.4 在4.3的基础上使用ArrayList fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?

    arraylist中contains的源代码
    

    答:从源代码中可以看出,在contains()方法传入的参数是null,则直接在list找有没有null元素,如果传入的参数不是null,则contains函数用调用equals方法,把传入的参数与list中每个元素做比较。
    
    

    代码阅读:PersonTest.java(abstract、多态)
    5.1 画出类的继承关系

    5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因

    答:自己推测:对一组person对象根据age由大到小排序,并且分别以emlopyee、student、programmer、mannager类的toString的形式输出
        运行结果(下图) 
    

    分析:因为person为抽象类不能创建新对象不能实例化,所以数组中每个对象应该以他们所定义的类中的tostring的形式输出。
    

    5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?

    答:(1)作用是调用父类的方法。(2)不行。原因是去掉super,JAVA会默认调用父类的无参数的构造函数,而父类中没有无参数的构造函数,因此会报错。
    

    5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?

    for (Person person : peoples) {
    System.out.println(person);
    }
    
    答:(1)以上代码中体现了多态,每个对象输出的格式分别为其被定义的类中的toString。(2)多态的好处: 避免重复代码多,根据不同类型对象调用相同方法名输出不同结果。(3)多态和继承的关系:首先是因为有了继承才有父类和子类的关系,其次有了父类和子类的关系,子类才能调用父类的方法,而当调用父类的方法名和子类中的方法名相同时要根据对象类型来判断选择哪个方法,此时产生多态。
    

    3. 码云代码提交记录

    4. PTA实验

    4-1 比较简单,巩固了如何编写toString方法。
    4-2 一直编译错误不知道错在哪还在研究
    5-4 首先是学习到如何获取对象的类型和父类类型,用hape.getClass()(获得类型),shape.getClass().getSuperclass()(获得父类型);其次学会使用抽象类并继承抽象类的用法。
    5-5 这题主要是考察对equals的编写和用法,在写这题的时候用到了多个for循环但觉得代码好像有点冗余,要再考虑一下是否能使代码更简洁一些。
    5-6 这题是对继承覆盖的综合练习,写的代码还有些错误,还在努力修改中。
    另外可能自己理解能力比较差。。。在一些题目上需要花一些时间才能把题目读懂,有时候不太明白题目意思
    
  • 相关阅读:
    c# 并行运算二
    c# 并行运算
    Task+http请求
    Task多线程
    SSO系统认证
    web系统权限设计
    AutoMapper的使用
    中间件
    express-middleware
    中间件概念
  • 原文地址:https://www.cnblogs.com/carol520123/p/6554488.html
Copyright © 2011-2022 走看看