• 1.本周学习总结

    1.1 尝试使用思维导图总结有关继承的知识点。

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

这周上课主要学了继承,在打代码的时候对各个关键字(除了super关键字)的用法有一点混乱。对多态和继承的区别也有点混淆,努力百度中。有时候上课感觉听多了但一到打代码就啥都不会了,可能是因为没巩固好。
  • 2. 书面作业

① 注释的应用

  • 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)


② 面向对象设计(大作业1,非常重要)

  • 2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)

A:

用户打开网页登录系统,浏览网页所列出的商品,经过挑选点击选择满意商品的数量与种类加入购物车。在购物车查看自己已选商品,确认数量与种类后点击结算,付账后系统将生成订单。
  • 2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。


③ ManagerTest.zip代码分析

分析ManagerTest.zip中的代码,回答几个问题:

  • 3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。

A:

public Manager(String n, double s, int year, int month, int day)
{
super(n, s, year, month, day);
bonus = 0;
} public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
} 用到了getSalary方法,n、s、year、month、day这几个属性。
  • 3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?

A:

   父类:
public double getSalary()
{
return salary;
}
子类:
public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
} 由程序可见,父类与子类方法不同的区别是子类会用super关键字来表示,故以此来区分父类与子类。
  • 3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。

A:

由以上截图可以看出,此行的e.getSalary()是调用Employee类的方法`。
  • 3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?

A:

自己觉得实现代码复用可以省点事,但查了一下百度,得知了:重新使用已有代码可以降低成本、增加代码的可靠性并提高它们的一致。既然如此,有了更高效的方法可以实现低成本,那如果再复制粘贴浪费空间,是没有必要的。

④ Object类

  • 4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?

A:

package ex2;
class Fruit{ //定义类为Fruit
private String name; //定义这个类的私有属性name(名字)
}
public class test201{
public static void main(String[] args){ //main函数,程序运行的入口。
System.out.println(new Fruit());
}
}
由于没有extends自任何类,故默认继承了Object为父类,并调用了Fruit的toString()方法。

显示如下:

  • 4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)

A:

package ex2;
class Fruit{ //定义类为Fruit
private String name; //定义这个类的私有属性name(名字) @Override
public String toString() { //调用toString()方法
return "I'M A Mango";
} }
public class test201{
public static void main(String[] args){ //main函数,程序运行的入口。
System.out.println(new Fruit());
}
} 调用了新增的toString方法后,其父类中的toString方法的代码不会没有。
若同时想用复用父类的方法,只要结合super关键字来复用即可。如return ""I'M A Mango" + super.toString();

显示结果如下:

  • 4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)

A:

public boolean equals(Object obj) {
return (this == obj);
}
功能如下:

package ex2;
class Fruit{ //定义类为Fruit
private String name; //定义这个类的私有属性name(名字) public Fruit(String name){
this.name = name;
}
@Override
public String toString() {
return "I'M A Mango";
}
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj == this)
return false; return true;
}
} public class test201{
public static void main(String[] args){ //main函数,程序运行的入口。
Fruit a = new Fruit("I'M A Mango");
Fruit b = new Fruit("I'M A mango"); System.out.println(a.equals(a));
System.out.println(a.equals(b));
} }
运行结果如下:

  • 4.4 在4.3的基础上使用ArrayList fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?

A:

可以将其主函数改为如上图:

可以看一下ArrayList的contatins方法的源代码为:
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
public boolean equals(Object obj) {
return (this == obj);
} 可以发现在contains方法会调用o.equals(elementData[i])方法来比较两个对象的引用是否相同。故功能是以此来实现的。

⑤ 代码阅读:PersonTest.java(abstract、多态)

  • 5.1 画出类的继承关系

A:

  • 5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因

A:

会显示为:
Manager [bonus=12000.3, toString()=Employee [salary=90000.1, toString()=Person [name=Clark, adress=GE, phonenumber=111, email=111@mail.com, age=10, gender=mail]]]
Student [status=1, toString()=Person [name=wang, adress=110, phonenumber=15959, email=15959@163.com, age=18, gender=male]]
Employee [salary=1000.0, toString()=Person [name=zhang, adress=136, phonenumber=1360, email=1360@mail.com, age=21, gender=female]]
Programmer [allowance=50000.0, toString()=Employee [salary=100000.0, toString()=Person [name=Gates, adress=usa, phonenumber=911, email=911@com, age=59, gender=male]]] 可以看出:继承了Person类的Student类和Employee类比继承了Employee类的Manager类和Programmer类少了一层嵌套。因为Employee类在被继承前也继承了Person类,故出现此结果。
  • 5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?

A:

作用是引用当前对象的直接父类中的成员。不知道答案,故查询了一下之后总结出:其实可以不用显式的写出super,但前提是“超类中有多个构造方法,且有一个是显式写出的无参的构造方法”。但此代码中没有类符合条件,故不可以。
  • 5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?

A:

for (Person person : peoples) {
System.out.println(person);
}
在代码里这里体现了多态。 百度到了比较具体完整的答案:多态对已存在的代码具有可替换性、可扩充性、接口性、灵活性、简化性,可以增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。也在应用中体现了灵活多样的操作,提高了使用效率。并且简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时可以看出其优点。
我认为,多态最大的好处对于现在我们来说应该是其灵活性比较强,并且比较简便,在编写多态方法时,所有重载的方法所执行的目的是相同的,但其参数也许不同。所以可以屏蔽不同子类对象之间的差异,写出通用的代码以适应需求的不断变化。

  • 3. 码云代码提交记录

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


  • 4. PTA实验

题目集:jmu-Java-03-面向对象1-基础-封装继承 中的

函数(4-1, 4-2, 4-3,4-4较难选做)

编程(5-4, 5-5, 5-6)

一定要有实验总结

5-4

发现对于子类的一些定义不是很清楚,一边搜索一边打代码,有时对于类与类的调用会由混淆。

5-5

这道会比5-4简单一些,按照题目要求写即可。

5-6

一看题目就比较复杂,还在写。。对ArrayList之类的实在不熟悉。

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

  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. 纯CSS实现垂直居中的7种方法

    今天申请博客通过了,给大家讲讲我所看到过的纯css实现垂直居中的各种方法.为什么要把它作为第一篇文章呢?因为这是我刚开始接触前端学到的对我最有用的知识,希望大家也可以从中获益! 在CSS中实现水平居中 ...

  2. Android护眼模式功能小记

    最近自己在做一个小说阅读器,看到某阅有护眼模式功能,别人都有,我怎么能没有? 现在这功能已经不稀奇了,很多手机都带有这个功能. 实现起来不难,用一个蒙版遮在界面上面就行. 至于蒙版,可以用Window ...

  3. PL/SQL 编程(二)游标、存储过程、函数

    游标--数据的缓存区 游标:类似集合,可以让用户像操作数组一样操作查询出来的数据集,实质上,它提供了一种从集合性质的结果中提取单条记录的手段. 可以将游标形象的看成一个变动的光标,他实质上是一个指针, ...

  4. Maven干货

    好处: 1. 依赖管理:对jar包统一管理 2. 项目构建: 项目编码完成后,对项目进行编译.测试.打包.部署.之前项目构建通过eclipse工具实现.今天学习新的工具也可以实现这些过程.比如:通过m ...

  5. 在Eclipse下运行Jmeter3.0源代码

    1.创建项目 准备工作:在http://jmeter.apache.org/download_jmeter.cgi中分别下载binaries和source两个压缩包,前者为release版本,后者则为 ...

  6. 运营商级NAT(Carrier-grade NAT)

    运营商级NAT(Carrier-grade NAT)   运营商级(Carrier-grade)NAT,是用于缓解是IPV4地址枯竭的一种方法,通过这种方法,原来被分配公网ip的端点.家庭网络等可以被 ...

  7. 写java代码遇到的一些问题

    记录一些做论文实验写代码时遇到的问题. 数据库SQL语句方面: 1.java通过JDBC连接MySql数据库方法 参见:http://hzy3774.iteye.com/blog/1689525 2. ...

  8. 关于VS AddIn的注册

    使用VS2010创建addin工程时,如果选择的开发语言是unmanaged c++,以addin为后缀的XML描述文件就不起作用了.这种情况下addin通过注册表来实现注册功能.实际可在如下位置找到 ...

  9. 理解javascript中的回调函数(callback)

    以下内容来源于:http://www.jb51.net/article/54641.htm 最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs ...

  10. 设计一个程序能够将某一个目录下面的所有文件名打印出来---File类的使用

    ,设计一个程序能够将某一个目录下面的所有文件名打印出来 运用到的方法有:返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录:list()           测试此抽象路径名表示的 ...