• 201621123050 《Java程序设计》第6周学习总结


    1. 本周学习总结

    1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结。

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

    Lambda表达式

    • 基本语法
      • (parameters) -> expression
      • (parameters) ->{ statements; }
    • 功能:简化代码

    2. 书面作业

    1. clone方法

    1.1 在test1包中编写Employee类,在test2包中新建一个Test类,并在其main中新建test1包中的Employee的对象,然后使用clone方法克隆一个新对象,能否成功?为什么?

    答:不能成功。protected native Object clone() throws CloneNotSupportedException;从这一段源代码可以看出,clone方法是用protected修饰的,不可以被其他包访问。

    1.2 如果要为自定义的类覆盖clone方法,需注意什么?

    答:1.覆盖的方法需要声明为public。2.调用super.clone()

    1.3 Object对象中的toString, equals, hashCode方法都使用public修饰,而clone方法却被protected修饰,请尝试解释原因。为什么不声明为public呢?

    答:在使用Object中的clone时,如果clone的是一个对象,那么只能拷贝一个引用,那么对clone出的对象修改时,原对象的内容也会被修改,这样就不是clone的本来用途的。所以在对一个类来说,就需要覆盖重写clone方法。

    2. 内部类

    2.1 使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目7-2。请贴图关键代码与运行结果,请在运行结果中出现你的学号与姓名。

    答:关键代码


    2.2. 分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?

    Comparator<Shape> shapeComparator = new Comparator<Shape>() { @Override public int compare(Shape o1, Shape o2) { //你的代码 } };
    答:shapeComparator中用匿名内部类实现了Comparator接口,并且重写了compare方法。

    2.3 题集:6-1(匿名内部类)实验总结。你觉得使用匿名内部类有什么好处?

    答:此题主要要求是写ActionListener的匿名内部类,之后使用循环输出即可。和java的众多特点一样,匿名内部类的一大好处就是减少代码量,对于只需要使用一次的类,使用匿名内部类代替即可。

    3. PTA实验总结

    3.1 PTA(自定义接口)。并回答:相比较不写接口,直接写一个类包含IntegerStack相应的方法来说,定义IntegerStack接口,然后定义其实现类这种方式有什么好处?

    答:这道题需要判断栈满、栈空的情况,否则会出现数组越界的错误。
    编写IntegerStack接口的好处是,我们可以使用多种形式来实现这一功能,例如数组或动态数组。

    3.2 PTA(静态内部类)。并回答:你觉得什么时候应该使用静态内部类?静态内部类与内部类有什么区别?

    答:这道题要先创建静态内部类,静态内部类不能直接访问外部类的非静态成员,需要使用外部类名.静态内部类调用。在各类中需要某一个方法,但其本身不是这个类的成员时,可以将该方法写入静态内部类中,再通过外部类调用。静态内部类与内部类的区别:静态内部类的对象不需要通过外部类对象来生成,可以直接使用外部类类名.静态内部类类名生成。

    3.3 PTA(继承覆盖综合练习-Person、Student、Employee、Company)。并回答:使用Collections.sort对引用类型数组进行排序需要有一个什么前提条件?

    答:这题的难点在于类中equal()方法的覆盖。Collections.sort对引用类型数组进行排序的一个前提条件式:要实现比较接口,并重写比较方法。

    4.大作业-继续完善(尝试使用接口改造你们的系统)

    对比上周代码,本周有一个修改,将shoppingcart类作为User类的一个属性

    假设在不同的实现中,购物车里的商品有的是存放在ArrayList,有的是存放在数组中。

    4.1 现在希望将系统中购物车的操作抽象到相应的DAO接口。

    4.2 为该接口定义至少两个实现(如数组、列表、文件)。截图自己负责部分的关键代码,要求出现名字与学号。

    我主要负责列表部分,暂时只进行顶端操作,以下是代码。数组部分由我的队友 程会青 完成。

    4.3 给出你们的Main程序,说明定义DAO接口的好处。

    在main中,我分别使用列表和数组进行添加商品的操作。一开始列表可以实现,而数组不可以实现,这是接口的一个好处,方法的实现一致却互不影响,便于修改代码和调试程序。调试以后,数组也可以实现了,但和列表的存储方式不同,内部的代码也不同,也体现了面向对象编程的多态。

    5. 代码阅读:PersonTest.java(abstract、多态、super)

    5.1 画出类的继承关系

    5.2 main函数的代码实现什么功能?

    答:对四个对象的年龄进行升序排序并输出。

    5.3 如果将子类中的super构造函数去掉行不行?

    答:不可以。子类无法自然继承private属性,也不能继承构造函数。所以需要用super来调用父类的构造函数。

    5.4 PersonTest.java中哪里体现了多态?

    答:Person中,各类中的toString方法的重写,体现了多态这一特性。

    3.码云及PTA

    题集:jmu-Java-04-面向对象2-进阶-多态接口内部类

    3.1. 码云代码提交记录

    3.2 截图PTA题集完成情况图

    需要有两张图(1. 排名图。2.PTA提交列表图)

    3.3 统计本周完成的代码量

    需要将每周的代码统计情况融合到一张表中。

    周次 总代码量 新增代码量 总文件数 新增文件数
    5 841 202 19 3
    6 1075 234 23 4
    7 1419 344 27 4
  • 相关阅读:
    UVa 10118 记忆化搜索 Free Candies
    CodeForces 568B DP Symmetric and Transitive
    UVa 11695 树的直径 Flight Planning
    UVa 10934 DP Dropping water balloons
    CodeForces 543D 树形DP Road Improvement
    CodeForces 570E DP Pig and Palindromes
    HDU 5396 区间DP 数学 Expression
    HDU 5402 模拟 构造 Travelling Salesman Problem
    HDU 5399 数学 Too Simple
    CodeForces 567F DP Mausoleum
  • 原文地址:https://www.cnblogs.com/jmugt/p/7747938.html
Copyright © 2020-2023  润新知