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

    作业06-接口、内部类

    1.本周学习总结

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

    注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
    注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。

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

    2. 书面作业

    1. clone方法

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

      无法成功,老样子,看clone的源代码是用protected修饰的,当在test2包中想实现clone时就会报错,类型Employee中的方法clone()不可视。protected修饰时不是自己包的类无法访问。

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

      首先是要求子类覆盖了方法和实现Cloneable,方法clone()应该用public修饰,拿1.1来说,当修改为public时还有问题,


    未处理的异常类型,原来需要修改如下。处理异常后就运行成功了,em4克隆了em1。

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

      都知道默认的clone方法是一种浅拷贝,比如像对于Employee类中的属性name是一个引用,使用clone最终em1和em4中的name都是同一个String对象,而如果是深拷贝,指向的就是两个不同的String对象。protected的权限是只有自己本包中的子类才能访问,这样子就安全了,外包没有访问权限,如果要实现深拷贝,自己包里的子类去重写下就OK,就如果用public修饰,那任何位置都能访问,哪里都能实现深拷贝,那不全乱了。

    2. 内部类

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

    匿名类:

    Lambda表达式:

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

    Comparator<Shape> shapeComparator = new Comparator<Shape>() {
        @Override public int compare(Shape o1, Shape o2) { 
             //你的代码
        }};
    

    shapeComparator所指向的对象使用Comparator接口来对比较这个方法重写。

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

    3. PTA实验总结

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

      我们定义一个IntegerStack接口,将Integer元素的栈的常见方法写入,那可就方便了,当我看见这个接口里面的方法时,哎,我知道有这些这些方法,看完,好了,哦,在下面中我能用的有这些方法,当然也将方法与实现相互分离开,如果要更换ArrayIntegerStack这个类,我接口还可以用啊,留着。

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

      这题最后调用时应写成System.out.println(ArrayUtils.PairResult.class);来实现这个调用过程。静态内部类可以提高封装性,看这道题,我试用一个静态内部类定义了两个属性,max和min,这样子,我不用在类ArrayUtils里面再来一次定义,而且,都知道静态内部类PairResult对外部类ArrayUtils来说是外部类的一部分,呈现出的关联性增强了。
      (1)静态内部类是独立完整的,就是可以不依赖外部类,而内部类和他的外部类是一种依赖的关系。内部类:you jump,i jump!
      (2)静态内部类只能访问外部类的静态的属性和方法,而内部类是自由的,它可以访问外部类的所有属性和方法。

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

      这题要写的类比较多,类之间的关系了解清楚,按要求写,问题不多,自动生成的也比较多,难点应该是equals的比较使用,虽然是自动生成,但是修改的较多。
      使用Collections.sort对引用类型数组进行排序需要这个引用类型数组已经实现了Comparable的接口,当然还要再覆盖compareTo方法。

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

    参考Case-StudentDao.zip案例
    假设在不同的实现中,购物车里的商品有的是存放在ArrayList,有的是存放在数组中。

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

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

    我写了数组实现:

    原来的是用列表实现的。合作伙伴直接写了文件来保存商品信息,用户信息。

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

    好处:清晰的知道会用到的方法,将方法实现与方法声明分来。方法写进接口后,比如某个类要用到某个方法,就可以直接用,不同的类可以一起使用同一个方法,也可以使用不同方法。

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

    5.1 画出类的继承关系

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

      创建四位成员信息,接着for循环实现排序并输出。

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

      看图,看到报错,StackOverflowError,大概的意思应该是虚拟机分配给线程的栈太小,比当前的栈深度还小。我猜想指明了super的toString所需的栈比直接的toString的需要的栈来的小。去掉就不行。

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

      我们写了父类person类,之后写了person类的子类,Student类和Employee类,这时呢,Employee类又添加了两个子类Manager和Programmer,这就展现了多态性,在我们写Person类时,并不知道Person类里要写什么人,但是可以通过Person类引用出来学生类和职工类,同理Employee类也引用出了Manager类和Programmer类。

    3.码云及PTA

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

    3.1. 码云代码提交记录

    在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

    3.2 截图PTA题集完成情况图

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

    3.3 统计本周完成的代码量

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

    周次 总代码量 新增代码量 总文件数 新增文件数
    1 0 0 0 0
    2 571 571 19 19
    3 1029 458 20 1
    4 1029 0 20 0
    5 1359 330 25 5
    6 2061 702 35 10
    7 2653 592 42 7
  • 相关阅读:
    又玩起了“数独”
    WebService应用:音乐站图片上传
    大家都来DIY自己的Blog啦
    CSS导圆角,不过这个代码没有怎么看懂,与一般的HTML是不同
    网站PR值
    CommunityServer2.0何去何从?
    网络最经典命令行
    炎热八月,小心"落雪"
    Topology activation failed. Each partition must have at least one index component from the previous topology in the new topology, in the same host.
    SharePoint 2013服务器场设计的一些链接
  • 原文地址:https://www.cnblogs.com/bbshenme/p/7739395.html
Copyright © 2011-2022 走看看