1. 本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。
1.2 可选:使用常规方法总结其他上课内容。
答:1.clone方法是属于Object对象的,子类若是要使用该方法,则子类需要对该方法进行覆盖。
2.嵌套类分为两种:static和non static,其中的non static被称作是内部类。
3.构造non static时要注意必须有外围类才能建立其内部类,但是static内部类相当于一个全新的类,是不需要先建立外围类的,另外内部类可以访问 外围类的所有属性和方法,也包括private属性和方法。
4.AWT的组件都是“重量级”的组件,Swing属于“轻量级”得组件,绝大多数的Swing组件的名称都以字母J开头。
5.Swing组件可以分为顶层容器、中间容器、原子组件。顶层容器的作用是为其他的GUI组件的绘制提供位置,中间容器的目地是为了更方便地定位其他GUI组件。6.任何支持GUI的操作环境都要不断地监视发生的事件,然后操作环境将这些事件报告给正在运行的应用程序。
2. 书面作业
clone方法
1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
答:每个类直接或间接的父类都是Object,因此它们都含有clone()方法,但是因为该方法是protected,所以都不能在类外进行访问,所以在覆盖clone方法时要注意将修饰符改为public。下面是clone的源代码:
如果在它的子类中没有覆盖clone方法,永远都是抛出一个CloneNotSupportedException,所以如果要访问的话,不仅要让子类实现Cloneable接口,还要覆盖这个clone方法。
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。
答:一般在希望这个类的子类可以拥有访问这个成员变量或者方法的权利,而其他类仍然像private的限制一样无法访问这个类的某个成员或者方法时会使用protected进行修饰,比如Shape例子中的Circle类和Rectangle类都需要求面积和周长,所以getarea()和getPerimeter()方法就可以用proteced修饰。
1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?
答:不能成功,因为这是在两个不同的包中使用clone方法,而如1.1题所说,protected修饰的方法不能在类外部进行访问。
2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2
仅需粘贴关键代码与运行结果,图片不要太大。
Comparator<PersonSortable2> NameComparator=(o1,o2)-> o1.getName().compareTo(o2.getName());
Comparator<PersonSortable2> AgeComparator=(o1,o2)-> o1.getAge()-o2.getAge();
Collections.sort(person,NameComparator);
Collections.sort(person,AgeComparator);
运行结果如下:
3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?
Comparator shapeComparator = new Comparator() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
答:shapeComparator所指向的对象实现了Comparator接口。
GUI中的事件处理
4.1 写出事件处理模型中最重要的几个关键词。
答:事件源、监听器、适配器
4.2 使用代码与注释,证明你理解了事件处理模型。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;//javax表示Java扩展包
public class FrameDemo{
public static void main(String args[]){
JFrame frame =new JFrame("显示");//创建一个框架
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});//使用监听器结束程序
JLabel label=new JLabel("Java的第六次作业");//创建一个文本标签
label.setPreferredSize(new Dimension(200,100));//设定标签大小
frame.getContentPane().add(label, BorderLayout.CENTER);//设置布局
frame.pack();//使JFrame的大小自动适合所含组件大小
frame.setVisible(true);//默认框架是不可见的,所以要设置为可见的
}
}
运行结果:(此题参考课外书)
结对编程:面向对象设计(大作业2-非常重要,未完成-2)
继续完善上周的项目作业。考核点如下:
5.1 尝试使用图形界面改写。
5.2 给出两人在码云上同一项目的提交记录截图。
5.3 与上周相比,项目的主要改动是什么?
主要改动就是用图形界面,还未完成
3.1. 码云代码提交记录
3.2. PTA实验总结
总结:5-3这道题需要判断栈满和栈空的情况,除此之外忘记写Main函数导致在pta上提交会出现编译出错为Compiler did not create the expected binary。
5-4这道题比上一题要简单,但是有一个难点是同时返回最大值和最小值的问题,Java中同时返回多个值的问题解决方法有3种,一种是用数组,然后返回数组,第二种是返回集合,第三种就是返回对象。