201521123061 《Java程序设计》第六周学习总结
***代码阅读:Child压缩包内
1. 本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。
注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。
1. clone方法
1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
在JDK中查询可知Object是被protectd修饰的,当父类中的属性或方法是被protected修饰的时候子类只能在和父类同一个包的时候才可以;所以在自定义的时候将clone声明成Public;
覆盖clone方法使还要注意浅拷贝与深拷贝的问题,用Object中默认的clone方法,是浅拷贝,而深拷贝需要在Clonable接口中覆盖并实现clone方法,浅拷贝与深拷贝的区别如下图:
浅拷贝:将这个新字符串对象的引用赋给新拷贝的Person对象的name字段
深拷贝:根据原Person对象中的name指向的字符串对象创建一个新的相同的字符串对象将这个新的字符串对象赋给person1
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。
首先protected修饰的方法和成员变量只能被同一个包里的所有类所访问,所以当所写的类对用户不可见时且同一个包中的其他子类可以访问时选择用protected修饰
在shape类中有两个子类分别继承了shape类,所以选择用protected修饰
1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?
- 不会成功,test1与test2在两个不同的包内
2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2
Lambda表达式:
Comparator<PersonSortable> NameComparator = (PersonSortable object1,PersonSortable object2)->(object1.getName().compareTo(object2.getName())); object2->(object1.getName().compareTo(object2.getName()));
源代码:
Comparator<PersonSortable2> NameComparatoComparator<PersonSortable2>() {
public int compare(Object object1, Object object2){
if(object1.getName().compareTo(object2.getName)>0){
return 1;
}
else if(object1.getName().compareTo(object2.getName)<0){
return -1;
}
else return 0;}
};
Comparator<PersonSortable2> AgeComparator = Comparator<PersonSortable2>(){
public int compare(Object object1, Object object2){
if(object1.getAge()>object.getAge()){return 1;}
else if(object1.getAge()<object.getAge()){return -1;}
else return 0;
}
};
3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
shapeComparator实现了Comparator接口
4.GUI中的事件处理
4.1 写出事件处理模型中最重要的几个关键词。
- 事件源
- 事件对象
- 监听器
4.2 使用代码与注释,证明你理解了事件处理模型。
贴上一段PPT中的代码:
import java.awt.event.*;
import javax.swing.*;
public class Tester {
public static void main(String[] args) {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b = new JButton("Press Me!");/*在这里定义了一个事件,也就是事件源*/
b.addActionListener(new ButtonHandler());/*插入了一个监听器*/
f.add(b);f.setSize(200, 100);f.setVisible(true);
}
5.GUI中的事件处理
结对编程:面向对象设计(大作业2-非常重要,未完成-2)
继续完善上周的项目作业。考核点如下:
5.1 尝试使用图形界面改写。
5.2 给出两人在码云上同一项目的提交记录截图。
与上周相比,项目的主要改动是什么?
将商场购物系统用图形化界面输出.
参考资料:
结对编程参考资料
使用Processon画图
视频-使用Netbeans编写GUI
重要:Swing实验参考资料
JTable用法,用于呈现表格数据
Swing相关文章
3. 码云上代码提交记录及PTA实验总结
题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录
3.2. PTA实验
这次实验是关于接口,内部类与静态类的编程实验;在做5-4题的时候极容易忽略在静态类中调用非静态累的非法操作,总是搞错,还是对静态类与非静态类调用关系的不熟悉。