201521123042 《Java程序设计》第6周学习总结
1. 本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。
2. 书面作业
Q1.clone方法
1.1 Object对象中的
clone
方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?答:创建自己的自定义类时,必须覆盖继承的 .clone() 方法,以复制自定义类的属性。要注意重新定义clone方法时要将它声明为pubilc。protected修饰clone()方法时子类只能调用受保护的clone方法克隆它自己,
所以,必须重新定义clone方法 ,并将它声明为pubilc,这样才能让所有的方法克隆对象。做完上述操作之后,编译发现报错,抛出 CloneNotSupportedException 异常,出现这个情况的原因是由于没有实现Cloneable接口1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业
Shape
为例说明。答:用protected修饰的成员变量可以被三种类所引用:该类自身、与它在同一个包中的其它类、在其他包中的该类的子类。使用protected修饰符的主要作用是允许其他包中该类的子类来访问父类的特定属性。此外,用该关键字修饰的成分是受保护的,只可以被同一包及其子类的实例对象访问。所以,当coder希望类某一方法只被同包中的类或者子类访问的时候,用protected进行修饰。Shape类被Circle、Rectangle这两个子类继承,这两个子类都需要使用getPerimeter()与getArea()两种方法,所以可以用protected修饰方法。
1.3 在test1包中编写简单的
Employee
类,在test2包中新建一个TestProtected
类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?test 1 包中代码:
private String name;
private double salary;
public Employee(String name, double salary){
this.name=name;
this.salary=salary;
} @Override
public String toString() {
return "Employee [name=" + name + ", salary=" + salary + "]";
} public Employee clone() throws CloneNotSupportedException{
return (Employee) super.clone();
}
}
test2包中代码:
package test2; public class TestProtected {
public static void main(String[] args) { TestProtected employee=new TestProtected("Yao",3000);
TestProtected copy = null;![](http://images2015.cnblogs.com/blog/1109769/201704/1109769-20170402205634024-1683386050.png) copy = employee.clone();
System.out.println(copy); }
}
不能成功。因为TestProtected
类和Employee
类不在同一个包内,TestProtected
类也未继承Employee
类。
修改后代码如下:
package test2;
import test1.Employee;
public class TestProtected {
public static void main(String[] args) {
Employee employee=new Employee("Yao",3000);
Employee copy = null;
try {
copy = employee.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(copy);
}
}
运行结果为:Employee [name=Yao, salary=3000.0]
Q2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2
Labmda表达式语法:参数 -> 表达式或程序块{ }
部分代码如下:
Comparator<PersonSortable2> nameComparator = (o1,o2)->o1.getName().compareTo(o2.getName());//匿名内部类的方法新建比较器
Comparator<PersonSortable2> ageComparator = (arg0,arg1)->arg0.getAge()-arg1.getAge();//匿名内部类的方法新建比较器
Arrays.sort(person,nameComparator);//按照名字排序
Arrays.sort(person,ageComparator);//按照年龄排序
输入数据:
5 zhang 15 zhang 12 wang 14 wang 17 li 17
运行结果:
Q3.分析下列代码,回答
shapeComparator
所指向的对象与Comparator接口有什么关系?Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
答:用匿名内部类,将compare方法进行重写,shapeComparator类实现了Comparator接口
Q4.GUI中的事件处理
4.1 写出事件处理模型中最重要的几个关键词。
事件源:产生事件的来源,通常是各种组件,如按钮,窗口等.
事件对象:于每一个事件源发生一个动作时,就会产生一个事件。
事件监听器:负责监听事件源发生的事件,并对不同的事件做相应的处理。
4.2 使用代码与注释,证明你理解了事件处理模型。
(此题不是很懂,于是仔细看了老师的ppt,然而最后还是请教了同学)
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MainGUI {
static int count = 0;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame("MyText");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b = new JButton("press me!");// 事件源
b.addActionListener(new ActionListener() {
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
System.out.println("The event occurred" + (count + 1) + "times");
b.setLabel("click" + new Integer(++count).toString() + "times");
System.out.println("Eventsource:" + e.getSource().getClass());// 获得事件源
}
});
// b.addActionListener(new ButtonHandler());// 注册监听器
f.add(b);
f.setSize(200,300);
f.setVisible(true);
}
});
}
}
Q5.结对编程:面向对象设计
继续完善上周的项目作业。考核点如下:(还在修改代码中)
5.1 尝试使用图形界面改写。
5.2 给出两人在码云上同一项目的提交记录截图。
5.3 与上周相比,项目的主要改动是什么?
对上周的代码进行完善,原来的程序不一定适用于图形界面,需要改动的地方有很多
郭炜埕 | 姚佳希 | 项目地址 |
---|---|---|
[郭炜埕的博客链接][http://www.cnblogs.com/vicheng/p/6652066.html] | [姚佳希的博客链接][https://i.cnblogs.com/EditPosts.aspx?postid=6659732] | [ShoppingCart码云地址][https://git.oschina.net/vicheng/ShoppingCart/commits/master] |
3. 码云上代码提交记录及PTA实验总结
题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2. PTA实验
函数(选做:4-1)、编程(5-3, 5-4)
一定要有实验总结
5-3:一个类可以实现多个接口,在本题中用接口描述一个存放Integer元素的栈的常见方法。
5-4:静态内部类相当于一个全新的类。不需要创建外部类后才能创建内部类
201521123042 《Java程序设计》第6周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- MQ选型对比文档
几种MQ产品说明: ZeroMQ : 扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装,如果我们做为消息队列使用,需要开发大量的代码 RabbitMQ ...
- Shell curl 和 wget 使用代理IP
Linux Shell 提供两个非常实用的命令来爬取网页,它们分别是 curl 和 wget curl 和 wget 使用代理 curl 支持 http.https.socks4.socks5 wge ...
- Markdown的简单用法
Markdown 是一种用来写作的轻量级标记语言,它用简洁的语法代替排版,而不像一般我们用的字处理软件 Word 或 Pages 有大量的排版.字体设置.它使我们专心于码字,用「标记」语法,来代替常见 ...
- SQL 三种基本Join
Join是关系型数据库系统的重要操作之一,SQL常用Join:内联接.外联接和交叉联接等. 这里讨论一下这常用的三种连接. 测试环境:db2 v10.1, linux 表定义: --用户 CREATE ...
- 外部排序&多路归并排序
外部排序: 一.定义问题 外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序 整个文件的目的.外部排序最常 ...
- 解析Linux中的VFS文件系统之文件系统的来源与简介(一)
最近挂载了N多的文件系统,大致了不同文件系统的相应特性及挂载方式,却还是对Linux的文件系统没有从源码方面去了解.不求甚解确实不好不好. 于是借鉴一些大牛的博客及自己的理解,总结了博客系列: 一.V ...
- CentOS 7 服务器配置--安装Java和Tomcat
一 安装 JAVA (jdk_8u121_linux_x64) #查看是否安装了OpenJDK #检查是否安装了JAVA java -version rpm -qa | grep java #卸载已安 ...
- 设计模式(4)建造者模式/生成器模式(Builder)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...
- centos7破解mariadb密码
第一步,停止运行mysql: systemctl stop mariadb.service 第二步,使用" -skip-grant-tables"参数重新启动mysql: mysq ...
- pdf.js跨域问题的分析
最近在做公司业务时,需要在线浏览pdf.在现代浏览器中, 均可直接浏览pdf文件,无兼容性问题.但公司的业务线需要支持到ie8. 经过自己的搜索调研, pdf.js比较适合.pdf.js兼容到ie9, ...