1. 本周学习总结
- 1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。
注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。
2. 书面作业
1.clone方法
-
1.1 Object对象中的
clone
方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?答:(1)自定义的类中要实现Cloneable接口,如果没有实现这个接口就会出现异常 (2)在覆盖时要声明为public (3)调用的时候要用super.clone();
-
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业
Shape
为例说明。答:上题说到protected修饰的变量或方法只能被同包类或者子孙类继承或使用,以作业Shape为例的话,我们分别设计了Circle类和Rectangle类,因为Circle类和Rectangle类都继承Shape类型,且Shape中的getPerimeter与getArea分别为计算面积与周长的方法,所以就可以直接调用getPerimeter()与getArea()两种方法,这里就可以用protected修饰。
-
1.3 在test1包中编写简单的
Employee
类,在test2包中新建一个TestProtected
类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?答:不能成功。
2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2
仅需粘贴关键代码与运行结果,图片不要太大。
-
匿名内部类
NameComparator a = new NameComparator(); Arrays.sort(persons,a); for(PersonSortable2 personSortable2 : persons){ System.out.println(personSortable2); } AgeComparator b = new AgeComparator(); Arrays.sort(persons,b); for(PersonSortable2 personSortable2 : persons){ System.out.println(personSortable2); }
-
Lamda表达式
Arrays.sort(persons,(o1,o2)->o1.getName().compareTo(o2.getName())); Arrays.sort(persons,(o1,o2)->o1.getAge()-o2.getAge();
实验结果:
3.分析下列代码,回答shapeComparator
所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() { @Override public int compare(Shape o1, Shape o2) { //你的代码 } };
答:让`shapeComparator`所指向的对象实现了`Comparator`接口, public int compare(Shape o1, Shape o2)使用匿名内部类的方法进行排序。
就如同上一题,可以直接使用Arrays.sort()进行排序。
4.GUI中的事件处理
-
4.1 写出事件处理模型中最重要的几个关键词。
答:事件:描述发生了什么;事件源:事件的产生器;事件监听器:根据某种类型的事件XXX,定义对应的事件监听器类,该类需要实现针对特定事件的特定接口。
-
4.2 使用代码与注释,证明你理解了事件处理模型。
public class EventMainGUI1 extends Frame{ static int count=1; public EventMainGUI1 (String title){ super(title); } public static void main(String args[]){ EventMainGUI1 f=new EventMainGUI1 ("hello"); f.setLayout(new FlowLayout()); final JButton b = new JButton("1"); //事件源,创建一个按钮 b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { b.setLabel(new Integer(++count).toString()); //每点击一次按钮,按钮上的数字就会加1 } }); f.add(b); //添加按钮 f.setSize(100,200); //设置窗体大小 f.setBackground(Color.pink); //设置窗体颜色 f.setVisible(true); //设置窗体可见 } }
5.结对编程:面向对象设计(大作业2-非常重要,未完成-2)
继续完善上周的项目作业。考核点如下:
- 5.1 尝试使用图形界面改写。
- 5.2 给出两人在码云上同一项目的提交记录截图。
-
5.3 与上周相比,项目的主要改动是什么?
3. 码云上代码提交记录及PTA实验总结
题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
- 3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
- 3.2. PTA实验
函数(选做:4-1)、编程(5-3, 5-4)
一定要有实验总结
答:(1)继续学习comparable与comparator
(2)感觉接口用起来更加方便,本周实验比较简单,但是在编写的时候仍然觉得基础不扎实,有待提高。