1. 本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。
注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。
2. 书面作业
1.clone方法
1.1 Object对象中的clone
方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
1.子类要实现Cloneable接口,否则会导致抛出CloneNotSupportedException异常
2.在子类中重写clone方法,并声明为public
3.在clone方法中调用super.clone()
参考重点截图:
参考文章:
Java中Cloneable接口
详解Java中的clone方法
Java 深度克隆 clone()方法重写equals()方法的重写
浅析java中clone()方法
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape
为例说明。
当某些方法只想被子类和同包访问的时候用protected修饰,以shape为例其中getPerimeter与getArea方法只有继承的子类才有这种方法所以用protected修饰。
1.3 在test1包中编写简单的Employee
类,在test2包中新建一个TestProtected
类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?
package test1;
public class Employee implements Cloneable
{
public Employee(String n, double s)
{
name = n;
salary = s;
}
public Employee clone() throws CloneNotSupportedException
{
Employee cloned = (Employee) super.clone();
return cloned;
}
private String name;
private double salary;
}
package test2;
public class TestProtected {
public static void main(String[] args) {
Employee original = new Employee("John Q. Public", 50000);
Employee copy = original.clone();
}
}
当然不能通过啦,两个类不在同一个包里,可以在test2中import text1.Employee;
2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2
仅需粘贴关键代码与运行结果,图片不要太大。
关键代码
Comparator<PersonSortable2> NameComparator = (o1,o2)->o1.getName().compareTo(o2.getName());
Comparator<PersonSortable2> AgeComparator = (o1,o2)->o1.getAge()-o2.getAge();
Arrays.sort(persons,NameComparator);
System.out.println("NameComparator:sort");
for(int i=0;i<n;i++){
System.out.println(persons[i]);
}
Arrays.sort(persons,AgeComparator);
System.out.println("AgeComparator:sort");
for(int i=0;i<n;i++){
System.out.println(persons[i]);
}
运行结果
3.分析下列代码,回答shapeComparator
所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
这是一个匿名内部类,实现了Comparator接口并且重写了compare方法。
4.GUI中的事件处理
4.1 写出事件处理模型中最重要的几个关键词。
- 事件源:事件的产生器
- 事件:描述发生了什么的对象。
- 事件监听器
4.2 使用代码与注释,证明你理解了事件处理模型。
JButton b = new JButton("Press Me!");//事件源
b.addActionListener(new ActionListener()){//监听器
public void actionPerformed(ActionEvent e) {
System.out.println("Action occurred");
System.out.println(e.getSource());//获得事件源
}
}
5.结对编程:面向对象设计(大作业2-非常重要,未完成-2)
继续完善上周的项目作业。考核点如下:
5.1 尝试使用图形界面改写。
5.2 给出两人在码云上同一项目的提交记录截图。
5.3 与上周相比,项目的主要改动是什么?
终于把上周的代码编程实现了,具体在上周的作业博客中,欠下的债还是要还的;
现在好好研究一下怎么弄成图形界面.
(上下两段隔了一段时间)
老师不好意思这边先提交了,算法那边周三要期末答辩(写算法代码实现+ppt制作并上台展示),还没搞定,
现在定不下心来研究图形界面和NetBeans的使用。我先去弄那边,弄好了再回来弄这边,不然弄着这边老想着那边。
参考资料:
结对编程参考资料
可以使用Processon画图
JTable用法,用于呈现表格数据
Swing相关文章
使用Netbeans编写GUI
重要:Swing实验参考资料
3. 使用码云管理Java代码
4. 实验总结
这些题目都比较基础,主要是让我们把上课学到的静态内部类和自定义接口的知识进行实践练习,让我们知道这么用它们。
不过发现一个有意思的点就是把三个类的代码放到pta上进行提交的时候需要把修饰的public去掉。
5-3中public Integer peek()这个方法中return是记得是arr[top-1]而不能top--。
5-4中关键处可能是
static PairResult findMinMax(double[] values){
double min = values[0];
double max = values[0];
for (double v : values){
if (min > v) min = v;
if (max < v) max = v;
}
return new PairResult(min, max);
}