zoukankan      html  css  js  c++  java
  • 作业06-接口、内部类

    1. 本周学习总结

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

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

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

    对匿名内部类Lambda表达式的总结:

    • 匿名内部类必须继承一个父类或实现一个接口,在匿名内部类继承一个父类时,相当于定义了一个子类,可以大大地简化代码,但是匿名内部类只能被使用一次,如果要多次使用,创建一个子类或定义一个接口的方法更优
    • Lambda表达式是对匿名内部类的进一步化简,其语法形式是参数->表达式或程序块{...},Lambda表达式的参数类型由编译器自动推导出来

    匿名内部的参考资料,写的很详细很好啊!

    2. 书面作业

    1. clone方法

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

    test1的Employee类

    test2的Test类

    使用clone方法不能克隆一个新对象,报错是:

    因此Emoloyee类中的clone方法要声明为public,且在Test类的main中要加上throws CloneNotSupportedException
    修改之后的运行结果:

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

    • 用protected修饰的只能被同包的类或子类访问,所以在为自定义的类覆盖clone方法时,要确保该类继承自Object类
    • 自定义类中的clone方法必须与Object类中的clone方法保持参数类型和个数以及方法名称相同

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

    用protected修饰clone方法是出于安全性考虑,用1.1题实现的拷贝只是浅拷贝,e1,e2实际上是因为指向同一个引用而运行出来的值相同,用protected修饰保证了只能在子类或同包的类中进行克隆,而如果用public修饰clone方法,那么在任何地方都可以进行克隆,都可以随意地改变引用指向的值,这样会导致某一处的值变化后,其他处所有的值都跟着改变,后果不堪设想

    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接口,重写了其中的compare方法

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

    • 实验总结:实现ActionListener接口,不用重写其中的方法,只要根据题目要求实现一个简单循环就好
    • 好处:大大简化代码,如果某个子类或接口只用到一次,不用再去创建一个子类或接口

    3. PTA实验总结

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

    • 实验总结:定义一个IntegerStack接口存放栈的一些基本操作,在ArrayIntegerStack类中具体实现这些操作,主要注意栈空栈满的条件,及空栈不能出栈,满栈不能进栈这些要求。
    • 好处:某一个类只能继承一个父类,但是可以实现多个接口,定义一个接口,再定义接口的实现类,可以方便编程人员的发挥,编程人员可以用各种各样不同的方法实现这个接口,后期如果这个类还想实现其他接口,可以直接加上要实现的接口,但是如果后期还想继承其他父类,就不能再在这个类中添加了

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

    • 实验总结:在ArrayUtils中定义静态内部类PairResult,在PairResult类前要加上static关键字,使用类名.方法名来调用类中的静态方法
    • 什么时候应该使用静态内部类:如果一个内部类与外部类有所联系,但又不依赖于其外部类的实例变量,则选择应用静态内部类。
    • 静态内部类与内部类的区别:
      静态内部类可以有静态的属性和方法,内部类不能有静态的属性和方法
      静态内部类只能访问外部类的静态成员和静态方法,而内部类则可以访问外部类的所有方法和属性
      实例化一个静态内部类可以直接实例化,实例化一个内部类要先实例化外部类再实例化内部类

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

    • 实验总结:这一题主要是编写equals方法存在难度,用eclipse自动生成的equals方法,然后再根据老师的要求,比如使用DecimalFormat保留两位小数,对原有的equals方法做小小小小的修改即可,在主函数中分类Student对象和Employee对象时,要用到instanceof关键字
    • 前提条件:使用Collections.sort进行排序需要新建ArrayList数组,且要在父类中实现Comparable或Comparator接口,重写接口中的方法

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

    结对对象:靳天婷

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

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

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


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




    运行结果:


    定义Dao接口的好处:
    提高安全性,方便编程人员的编写,在本次大作业中,定义了ProductDao接口,可以用列表实现该接口,也可以用数组实现该接口,十分灵活方便

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

    5.1 画出类的继承关系

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

    创建Employee、Student、Programmer、Manager对象,将这四个对象按照年龄从小到大排序输出

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

    不行,子类不会继承父类的private变量及方法,也不会继承父类的构造方法,所以子类中必须有super构造函数,否则会出现Implicit super construct ××× is underfined,must explicitly invoke another constructor的报错

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

    重写Person类、Student类、Employee类、Manager类、Programmer类的toString()方法体现了多态

    3.码云及PTA

    3.1. 码云代码提交记录

    3.2 截图PTA题集完成情况图



    3.3 统计本周完成的代码量

    周次 总代码量 新增代码量 总文件数 新增文件数
    2 343 343 10 10
    3 498 498 8 8
    5 788 788 26 26
    6 536 536 16 16
    7 776 776 9 9

    之前一直用CodeLines1.1,但是一直跳不出前几周的代码量,这次竟然给跳出了,所以第一张图片在第七周以前的代码量都为0

  • 相关阅读:
    Unity The Method Signature Matching Rule
    Unity The Property Matching Rule
    Unity The Type Matching Rule
    Unity The Custom Attribute Matching Rule
    Unity The Member Name Matching Rule
    Unity No Policies
    Unity The Return Type Matching Rule
    Unity The Parameter Type Matching Rule
    Unity The Namespace Matching Rule
    关于TSQL递归查询的(转)
  • 原文地址:https://www.cnblogs.com/xh201621123064/p/7719791.html
Copyright © 2011-2022 走看看