1. 本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。
注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。
2. 书面作业
clone方法
1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
答:在自定义的类中覆盖clone方法时需要声明为public,否则其他类无法调用,因为protected修饰的方法是能被本类、继承类或同一个包里面调用。
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。
答:设计类的时候允许本类、同包下或是子类可以调用的方法或属性是使用protected修饰。以作业Shape为例,Shape为父类,父类中的计算面积getArea和计算周长getPerimete两个方法是每个子类都要调用的,因此这两个方法可以用protected修饰。
1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?
答:不会成功,出现两个错误。1.提示Employee cannot be resolved to a type,意思为无法解析这个类型,原因是employee类在另一个包中,在本包调用需要import test1.Employee;。2.提示the method clone()from the type Employee is not visible,出现这个错误的原因是因为clone这个方法是用protected修饰的,protected修饰的方法只允许在同一个包中或本类和继承的子类中调用,要使clone能被调用应该把clone方法用public修饰。
使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2
仅需粘贴关键代码与运行结果,图片不要太大。
使用匿名类与Lambda表达式改写,并使用Arrays.sort |
Comparator <PersonSortable2> NameComparator=(o1,o2)->o1.getname().compareTo(o2.getname());
Comparator <PersonSortable2> AgeComparator=(o1,o2)->o1.getage()-o2.getage();
Arrays.sort(per, NameComparator);
Arrays.sort(per, AgeComparator);
运行结果 |
分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
答:这里使用了匿名内部类,shapeComparator类实现了Comparator接口。
GUI中的事件处理
4.1 写出事件处理模型中最重要的几个关键词。
答:事件、事件源、事件监听器(ActionEvent、ActionListener)
4.2 使用代码与注释,证明你理解了事件处理模型。
\\
public class MainGUI {
public static void main(String[] args) {
JFrame f = new JFrame("Test");//新建一个JFrame容器
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);
}
private static class ButtonHandler implements
ActionListener{//监听器
public void actionPerformed(ActionEvent e) {
System.out.println("Action occurred");
System.out.println(e.getSource());//获得事件源
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String x= a.getText();//获得文本框信息
String y= b.getText();
new Menu().setVisible(true);//新建另一个页面
}
}
结对编程:面向对象设计(大作业2-非常重要,未完成-2)
继续完善上周的项目作业。考核点如下:
5.1 尝试使用图形界面改写。
5.2 给出两人在码云上同一项目的提交记录截图。
5.3 与上周相比,项目的主要改动是什么?
答:该项目由晓娴和凯欣共同完成,之前项目的输入只能在控制台输入,本周学习GUI之后把项目中的输入格式改成利用图形界面来输入,但具体功能的实现还未完善。
3. 码云上代码提交记录及PTA实验总结
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2. PTA实验
函数(选做:4-1)、编程(5-3, 5-4)
一定要有实验总结
答:5-3 提交到PTA显示部分正确,原因是忽略了输入的值的数目大于栈的长度的情况。
5-4 这题比较简单,主要就是考察静态内部类,注意静态方法只能调用静态属性,非静态不能调用,创建内部类之前要先创建外部类。