1. 本章学习总结

2. 书面作业

1.clone方法

1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。
1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?

(1.1)

答:在自定义的类中覆盖clone方法时需注意的是,Object对象中的clone方法是被protected修饰,需要修改成public修饰,确保其他类可以访问这个方法。


(1.2)

答:Shape中的Rectangle的width、length被定义为private,

public class Rectangle extends Shape
{
private double width;
private double length;
}
无法在子类中直接存取,只能通过public double getWidth() public double getlength()来获取;但是把shape中的width、length定义为public,
public class Rectangle extends Shape
{
public double width;
public double length;
}
又会完全开放这些量的权限,而我们只想让子类可以直接存取width、length的话,就得定义它们为protected,
public class Rectangle extends Shape
{
protected double width;
protected double length;
}
这样相同的包的类或者不同包中的类可以访问它的属性和方法。

(1.3)

答:不能成功。这俩类不在一个包内,也不是继承关系。

解决方法如下:

在test2包里加上import test1.Employee;

让TestProtected继承Employee类


2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2仅需粘贴关键代码与运行结果,图片不要太大。

//匿名类:
class PersonSortable2 {
private String name;
private int age;
public PersonSortable2(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return this.name+"-"+this.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class comparatorAnonymous { public static void main(String[] args) {
// TODO Auto-generated method stub
Comparator<PersonSortable2> NameComparator = new Comparator<PersonSortable2>(){
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
// TODO Auto-generated method stub
if (o1 == o2) return 0;
return o1.getName().compareTo(o2.getName());
}
};
Comparator<PersonSortable2> AgeComparator = new Comparator<PersonSortable2>(){
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
if (o1 == o2) return 0;
return o1.getAge()-o2.getAge();
}
};
Scanner sc=new Scanner (System.in);
int n = sc.nextInt();
PersonSortable2[] test=new PersonSortable2[n];
for (int i = 0; i < n; i++) {
test[i] = new PersonSortable2(sc.next(), sc.nextInt());
}
System.out.println("NameComparator:sort");
Arrays.sort(test,NameComparator);
for (PersonSortable2 personSortable1 : test) {
System.out.println(personSortable1);
}
System.out.println("AgeComparator:sort");
Arrays.sort(test,AgeComparator);
for (PersonSortable2 personSortable2 : test) {
System.out.println(personSortable2);
}
sc.close();
}
}

//Lambda表达式

public class comparatorLambda {

    class PersonSortable2 {
private String name;
private int age; public PersonSortable2(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return this.name+"-"+this.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner (System.in);
int n = sc.nextInt();
PersonSortable2[] test=new PersonSortable2[n];
PersonSortable2 o1;
PersonSortable2 o2;
Comparator<PersonSortable2> NameComparator = (o1 , o2) --> o1.getName().compareTo(o2.getName());
Comparator<PersonSortable2> AgeComparator = (o1,o2) --> o1.getAge()-o2.getAge();
for (int i = 0; i < n; i++) {
test[i] = new PersonSortable2(sc.next(), sc.nextInt());
}
System.out.println("NameComparator:sort");
Arrays.sort(test,NameComparator);
for (PersonSortable2 personSortable1 : test) {
System.out.println(personSortable1);
}
System.out.println("AgeComparator:sort");
Arrays.sort(test,AgeComparator);
for (PersonSortable2 personSortable2 : test) {
System.out.println(personSortable2);
}
sc.close();
}
}

3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?

Comparator<Shape> shapeComparator = new  Comparator<Shape>()
{
@Override
public int compare(Shape o1, Shape o2)
{
//你的代码
}
};

答:shapeComparator所指的对象能够实现Comparator接口,使其对象能够使用Arrays.sort进行排序。


4.GUI中的事件处理

4.1.写出事件处理模型中最重要的几个关键词。

答: 事件对象、事件源、事件监听器。

4.2.使用代码与注释,证明你理解了事件处理模型。
package test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame; public class MainGUI {
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);
}
private static class ButtonHandler implements ActionListener{//监听器
public void actionPerformed(ActionEvent e) {
System.out.println("Action occurred");
System.out.println(e.getSource());//获得事件源
}
}
}

3. 码云上代码提交记录及PTA实验总结

题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类

3.1. 码云代码提交记录

3.2. PTA实验

函数(选做:4-1)、编程(5-3, 5-4)
1.内部类书写格式问题,starter = new MySatrter (new ActionListener(){...})
2.在匿名内部类中存取局部变量,该变量必须是final,否则编译错误,final Scanner sc = new Scanner(System.in);
3.本次实验主要体会是在于匿名内部类的使用,在对于一次性的方法或者是结合Lambda进行重写方法有了较好的掌握。

201521123073 《Java程序设计》第6周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. U3D学习入门

    U3D最重要的五大界面 第一:场景(Sence),构建游戏的地方: 第二:层级(Hierarchy),场景中的游戏对象都列在这里. 第三:检测面板(Inspector),当前选中的资源或对象的设置,是 ...

  2. Qt控件窗体区域区分

    控件窗体区域区分几何参数: 指的是窗口的大小和位置,一个窗口有两套几何参数,一套是窗口外边框所占的矩形区域,另一套是窗口客户区所占的矩形区域,所谓窗口客户区就是窗口中除去边框和标题栏用来显示内容的区域 ...

  3. 【转】控制台,终端,tty,shell等概念的区别

    转自:http://www.2cto.com/os/201403/282583.html http://blog.sina.com.cn/s/blog_bcdac52b0101i2r1.html 控制 ...

  4. node里面的c/c++模块

    准备工作 node使用c++插件时需要使用node-gyp包,node-gyp把c++源码编译为二进制文件,js在调用二进制文件,编译后的二进制文件模块调用就和js的模块调用一样. npm insta ...

  5. 【Ubuntu16.04】 install nginx

    1. Download PGP key in order to pass the authentication of the nginx repository signature. click to ...

  6. AngularJS 动画总结

    对读过的几篇文章的总结,尽量保证逻辑性,不断补充.精简.更正. 后面会列出参考文章地址,方便以后取用.感谢各位作者以及翻译者. AngularJS 动画思考 一.如何使用 1)我们需要构建什么 2)如 ...

  7. PhotoShop CS6安装教程

    PhotoShop CS6安装教程... ===================== 安装包和激活码在最下面: ======================== =================== ...

  8. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  9. SpringBoot切面控制业务逻辑

    业务逻辑:写一个公共拦截类,过滤传进Controller的参数 为了调用接口安全起见,每个需要调用的接口有一个参数accessToken,用于安全验证 注:先进入过滤器Filter,再进入aop,最后 ...

  10. Volatile和Synchronized对可见性和原子性的支持

    在学习并发编程的时候,遇见了volatile和synchronized关键字问题,volatile是可以保证可见性,但无法保证原子性,synchronized关键字由于其是加锁机制,肯定是可以保证原子 ...