201621123078《Java程序设计》第6周学习总i结

1. 本周学习总结

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

1.2 可选:使用常规方法总结其他上课内容。
  • 嵌套类:非静态内部类拥有外部类的所有非静态方法和非静态属性,就算是private修饰的也可访问。
  • 匿名类:优点:1、无需额外创建一个类;2、简化代码;3、隐藏操作、体现了封装性。
  • Lambda语法:相当于是简化匿名内部类,语法为:参数->表达式或程序块{...}

2. 书面作业

1. clone方法

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

代码:


由题意编写,会出现错误:

修改后并运行,可以得到:

Answer:对于clone();方法,需要通过public进行修饰,使所有可见,否则在test2中就不能够调用之间的clone();

1.2 如果要为自定义的类覆盖clone方法,需注意什么?
  1. 需要在自定义类中实现Cloneable接口
    2.将clone()方法改为public;
1.3 Object对象中的toString, equals, hashCode方法都使用public修饰,而clone方法却被protected修饰,请尝试解释原因。为什么不声明为public呢?

clone():clone方法主要用于克隆当前对象,制作本地对象,这肯定需要在所有对象中所拥有,但clone()在Object中protected方法,所以子类实现需要覆盖此方法并实现Cloneable接口,那样才能在外部实现clone功能.若用了public则会造成实现了Cloneable接口并且实现clone方法的类都可以克隆一个Object对象,会造成信息泄露会混乱。(通过查看源代码可以更清楚)

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) { //你的代码 } };
Answer:shapeComparator所指向的对象能够实现Comparator的接口,对compare()方法进行重写,再对Shape类进行比较。

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

实验总结:实现ActionListener接口匿名类的编写,再根据题意做出输入和输出。
好处:使用匿名内部类不需要重新再去定义一个类,大大简化了代码,并加强了安全性。

3. PTA实验总结

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

实验总结:该题就是需要定义一个IntegerStack接口来完成一些关于栈的功能,需要注意的是,关于栈满栈空的情况。
好处:我们可以直接使用IntegerStack接口来实现其功能,而且还能通过其他方式来实现,更加灵活。

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

实验总结:该题主要是通过Arrays.sort()来实现对数组进行排序,再使用调用静态方法使用类名.方法名来实现题目要求。

Answer:如果一个内部类与外部类有所联系,但又不依赖于其外部类的实例变量,则选择应用静态内部类。区别在于:内部类相对于外部类来说,前者是后者的方法,所以当前者是static修饰的时候,在前者中不能访问后者中的非static属性和方法;
相反,当前者是非static修饰的时候,前者可以访问后者中的任何成员。

参考博客:http://blog.csdn.net/wolf_fang/article/details/52662640

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

实验总结:在编写equals()方法,可以用myeclipse中的方法直接得到,注意传入null的情况。

Answer:前提是需要对引用型的数组进行排序,在父类中先实现Comparable或Comparator比较器接口。

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

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

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

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

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

5.1 画出类的继承关系

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

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

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

不行,因为子类需要通过super构造函数来继承继承父类中private修饰的属性,去掉会出现错误。

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

Person类,Employee类,Student类,Manager类,Programmer类中有public String toString()方法,体现了多态。

3.码云及PTA

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

3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图

3.3 统计本周完成的代码量
周次 总代码量 新增代码量 总文件数 新增文件数
1 0 0 0 0
2 280 280 5 5
3 530 250 9 4
4 950 420 15 6
5 1345 395 20 5
6 1924 579 26 6
posted @ 2017-10-28 20:45  DansLv  阅读(166)  评论(1编辑  收藏  举报