201521123118《java程序与设计》第6周学习总结
1. 本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。
注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。
2. 书面作业
1. clone方法
1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
答:protected关键字定义的类只能在本类,子类,本包中使用,其他包不能使用 ;
覆盖clone方法,声明为public,实现cloneable接口;
浅拷贝与深拷贝。
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。
答:当一个方法需要被同一个包中的不同类中进行多次调用的时候则需要使用protected进行修饰。定义一个抽象类shape,其继承类有circle retangle 两个子类都有求算面积的方法,所以在父类shape中可以定义一个protectd 。
1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?
答:不可以。
package java2;
public class Employee implements Cloneable {
private String name;
private double salary;
public Employee(String name,double salary){
this.name=name;
this.salary=salary;
}
protected Employee clone()throws CloneNotSupportedException{
return null;
}
}
package test2;
import java2.*;
public class Testprotected {
Employee employee = new Employee("x",1.11);
Employee employee1 = employee.clone();
}
错误代码提示如下:
为 了让其它类能调用这个clone类的clone()方法,重载之后要把clone()方法的属性设置为public。
2. 使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2仅需粘贴关键代码与运行结果,图片不要太大
匿名类
interface NameComparator extends Comparator<PersonSortable>{
public int compare(PersonSortable o1, PersonSortable o2);
}
interface AgeComparator extends Comparator<PersonSortable>{
public int compare(PersonSortable o1, PersonSortable o2);
}
Arrays.sort(per, new NameComparator(){
public int compare(PersonSortable o1, PersonSortable o2) {
return o1.getName().compareTo(o2.getName());
}
});
Arrays.sort(per,new AgeComparator(){
public int compare(PersonSortable o1, PersonSortable o2) {
return o1.getName().compareTo(o2.getName());
}
});
lambda
Arrays.sort(per,(o1,o2)->o1.getName().compareTo(o2.getName()));
Arrays.sort(per,(o1,o2)->o1.getAge()-o2.getAge());
3. 分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
对继承方法的调用或覆盖,实现对compare方法的重写。
4. GUI中的事件处理
4.1 写出事件处理模型中最重要的几个关键词。
JTextField-文本字段,JLabel-标签,JButton-按钮;JTextField可以用于得到输入的信息,JLabel类似提示,JButton触发事件;
4.2 使用代码与注释,证明你理解了事件处理模型
未理解。
5. 结对编程:面向对象设计(大作业2-非常重要,未完成-2)
继续完善上周的项目作业。考核点如下:
5.1 尝试使用图形界面改写。
5.2 给出两人在码云上同一项目的提交记录截图。
5.3 与上周相比,项目的主要改动是什么?
3. 码云上代码提交记录及PTA实验总结
总结:
对内部类有所理解,成员内部类,静态内部类,方法内部类,匿名内部类;
其中内部类实例中,必须先对外部类进行创建,在对内部类创建,二静态内部类不用;
5.3实验对栈满的判断;