1. 本周学习总结

1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。

注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。

注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。

1.2 可选:使用常规方法总结其他上课内容。

  • clone的浅拷贝和深拷贝

    浅拷贝只是实现Cloneable接口,覆盖了clone()方法,并用public修饰,当且仅当要拷贝的对象都没有引用类型的

    如果拷贝的对象中含有引用类型的变量,以则需要hireDay属性为例,需要有 cloned.hireDay = (Date) hireDay.clone();

    这样改变拷贝后对象当中的引用类型变量的值,将不会影响到原来的值,实现身拷贝

  • 嵌套类

    有外部类才有内部类,除了静态内部类,

    嵌套类分为静态和非静态的,总之一个原则,在静态的类只能访问静态的,在非静态的只能访问非静态的

    内部类可以访问外围类的私有属性和方法

2. 书面作业

1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?

答:由于被protected修饰的,只允许本类或其子类访问,所以覆盖时要改为public,还需要用super.clone()调用Object父类的方法

1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。

答:在设计类时,不想被包外的类访问时,可以用protected进行修饰,比如要让Rectangle类和Circle类使用父类的属性或方法,而Shape类又不想让其他无干的类使用他的属性或方法,则可以采取这种修饰符

1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?

    分析:不能成功,截图如图所示,因为这两个类不在同一个包中,找到Object clone()的源代码,发现是由protected修饰,所以在main中会报错,则需要覆盖clone()方法
在Employee类中添加代码:
public Employee clone() throws CloneNotSupportedException {
Employee cloned = (Employee) super.clone();
return cloned;
}

使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2

仅需粘贴关键代码与运行结果,图片不要太大。

见上周作业,点击此处查看题3.3

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

    Comparator<Shape> shapeComparator = new  Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
    答:这段代码为匿名内部类,shapeComparator所指向的对象实现了Comparator接口,重写了compare方法,比较两个Shape类型的对象

GUI中的事件处理

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

  • 事件:敲击键盘,点击鼠标或按钮等称为事件

  • 事件源:就是事件发生的场所,指各个组件,比如按钮

  • 事件监听器:通过new java.awt.event.ActionListener() 重写一个匿名内部类,当点击组件的时候实现重写的代码

  • 事件委托模型:当某个事件发生时,我们想要让它产生一些效果或打印出内容,则需要通过事件源,注册监听器,将相应的代码放到实现了接口监听器中的

    public void ****Performed(ActionEvent e)方法中

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

  • 事件委托模型
public class Main {
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("点击此处!"); // 事件源
b.addActionListener(new ActionListener(){ //注册监听器,使用匿名内部类
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
System.out.println("事件发生了"+(count+1)+"次");
b.setLabel("点击了"+new Integer(++count).toString()+"次");
System.out.println("事件源:"+e.getSource().getClass());
}
});
f.add(b);
f.setSize(200, 200);
f.setVisible(true);
}
});
}

运行截图如下:

五、结对编程:面向对象设计(大作业2-非常重要,未完成-2)

继续完善上周的项目作业。考核点如下:

5.1 尝试使用图形界面改写。

  • 首先是登录的界面:

  • 登录失败

  • 登录成功:

  • 点击浏览商品

  • 点击上图的“我的购物车”

  • 添加商品

  • 添加成功

  • 查看购物车的商品

  • 结算

  • 清空商品

关键代码:

登录的窗口:(当且仅当账户名和密码都是Lin时才能成功登录)
user.setText(" 账户名:");
password.setText(" 密码:");
ok.setText("确认");
login.setText("登入");
login.addActionListener(new java.awt.event.ActionListener() {
@SuppressWarnings("deprecation")
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (userInput.getText().equals("Lin") && passInput.getText().equals("Lin")) {
Menue menue=new Menue("菜单");
menue.setVisible(true);
LoginFrame.this.dispose();
} else {
JOptionPane.showMessageDialog(null, "您输入的用户名密码不正确");
}
} 弹出购物车窗口的方法: mycart.setText("我的购物车");
mycart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Cart car=new Cart("我的购物车",iterm);
car.setVisible(true);
}
}); 增加商品确认键添加的监听器
addok.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
boolean flag=false;
Iterm a=null;
for(Iterm i:booklist){
if(i.getName().equals(addinputtext.getText())){
flag=true;
a=i;
break;
}
}
if(flag){
if(iterm.contains(a)){
iterm.get(iterm.indexOf(a)).number+=Integer.parseInt(addnumberinput.getText());
}
else{
a.setNumber(Integer.parseInt(addnumberinput.getText()));
iterm.add(a);
}
JOptionPane.showMessageDialog(null,"已添加");
}
else{
JOptionPane.showMessageDialog(null,"添加错误!");
}
}
});

5.2 给出两人在码云上同一项目的提交记录截图。

只有一个人...

码云地址

5.3 与上周相比,项目的主要改动是什么?

答:主要改动在外观上有很大的变动,而且输出输入的方式不同,不是从控制台获取,而是通过getText等获取,还有鼠标的点击,利用监听器等等,所以改动还是很大的,但是好在还有netbeans这个软件,给我减轻不少负担,总之弄这个图形界面还是比较麻烦的...或许是本人比较愚钝吧

参考资料:

结对编程参考资料

使用Processon画图

视频-使用Netbeans编写GUI

重要:Swing实验参考资料

JTable用法,用于呈现表格数据

Swing相关文章

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

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

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2. PTA实验

函数(选做:4-1)、编程(5-3, 5-4)
一定要有实验总结
  • 4-1



    这题是编写ActionListener的匿名内部类,但是只有Java8中匿名类或局部类可以访问外部的非final变量,但是pta平台不支持java8,因为要用到sc 所以在前面要加一个final

  • 5-3

    ArrayIntegerStack实现IntegerStack接口,重写了那些方法,发现主要是指针的指向要明确,出栈要减,入栈要加,最后再根据要求用Arrays.toString输出就好

  • 5-4

    这题使用的是嵌套类,外围围静态类,内为也是静态类,在外围中new一个内部类的对象,返回值为内部类的类型,最后再main入口函数中使用ArrayUtils.findMinMax

201521123063 《java程序设计》第六周学习总结的更多相关文章

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

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

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

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

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

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

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

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  5. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  6. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

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

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

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

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

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

    目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...

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

    20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...

随机推荐

  1. SpringMVC创建HelloWorld程序

    1.IDE说明和依赖管理工具说明 开发工具:intellij idea 依赖管理使用:maven 2.创建maven工程 创建新的maven工程,并添加相应的文件夹,创建好的项目目录如下所示: 3.添 ...

  2. python第一篇-------python介绍

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所 ...

  3. ReactiveCocoa源码解读(二)

    上一篇解读了ReactiveCocoa的三个重要的类的底层实现,本篇继续. 一.RACMulticastConnection 1.应用 RACMulticastConnection: 用于当一个信号被 ...

  4. 2017多校第9场 HDU 6169 Senior PanⅡ 数论,DP,爆搜

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6169 题意:给了区间L,R,求[L,R]区间所有满足其最小质数因子为k的数的和. 解法: 我看了这篇b ...

  5. 利用 :before :after伪类实现鼠标悬浮动画效果

    1.最近在逛网站的时候,想找一下喜欢的鼠标悬浮效果,避免广告的嫌疑,直接放图了: 2.在实现的时候,如果在直接使用鼠标hover ,transform,进行过渡,不能达到想要的效果,因为同时只能触发一 ...

  6. Struts2之初识

    Struts2教程 第一章 初识Struts2 主页:http://struts.apache.org/ 优势:用户请求,模块处理,页面展现.适用于企业级开发,便于维护. 配置:web.xml中添加的 ...

  7. VMware Workstation 12 Pro 之安装Windows10 EP系统

    VMware Workstation 12 Pro 之安装Windows10 EP系统... --------------- 先准备好要用的Win10的镜像文件ISO ---------------- ...

  8. “最美天气”版本II

    抓取实时天气前需要首先获得所有地区的cityCode,因为在最后queryWeather的时候需要传递这个参数. 最美天气获取全部cityCode及cityName的方法: 1.获取34个省及直辖市的 ...

  9. “无文件”恶意软件的威力:悄无声息一夜之间从ATM机中窃取80万美元

    去年雅虎接连曝出多个超大规模数据泄露事件,长期关注的你们一定都知道,5亿.10亿账户信息泄露的,除了雅虎也没谁了.就在这两天,5亿账户泄露的真相似乎正在浮出水面. 事件回顾 我们今天要讲的就是这桩5亿 ...

  10. System.ComponentModel.DataAnnotations 冲突

    项目从原来的.NET Framework4.0 升级到 .NET Framework4.5 编译报错. 查找原因是: Entity Framework 与 .net4.5 的 System.Compo ...