1. 本周学习总结

1.1 写出你认为本周学习中比较重要的知识点关键词

关键字:继承,多态。

1.2 尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。

2. 书面作业

1. 面向对象设计(大作业1-该作业将作为以后其他作业的基础,请务必完成)

1.1 讲故事:用50字以上讲一个你在网上商城购物或者在班级博客进行学习的故事。使用Markdown的加粗标记把关键名词标注出来,使用语句块标记把里面关键的动词标注出来。讲故事范例:见参考资料UML类图中如何绘制类图

打开购物APP先进行登录,登录界面提示我们输入帐号和密码,没有帐号的用户创建帐号,创建成功时,系统提示创建成功,然后用户输入新创建的帐号进行登录,此时需要进行帐号和密码的匹配,若匹配成功,即,登录成功,就有属于我们自己的购物车了,就可以随意添加商品到我们的购车了。

然后根据需要进行搜索,我想买一本有关Java的书 通过搜索Java关键词,出现了很多商品供我选择,点进去其中一个可以看到该商品的一些基本属性,价格啊之类的。假设我就想买这本书,我把它添加到购物车,进入购物车,我们可以看到商品条目信息,我们可以修改该商品的数量,当然价格也要相应的变化,或者清空购物车等操作。

提供搜索引擎目前有点无奈。。索性我们就建立一个仓库类,只有仓库有的商品可供用户选择。

1.2 找出系统中包含的类及其属性、方法,类与类之间的关系,并绘制相应类图。注意:不一定非要体现继承关系。只要能将系统描述完整即可。一开始设计的时候不要考虑太多,不要出现太多的类,仅出现必要的类,完成最小功能即可。对商城购物系统建议只做购物车模块。

类图



1.3 使用Java代码实现这个系统(不必很完善)。粘贴运行截图关键代码。将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。合作完成:2-3人一个小组。

队员:肖文婷,周文华

代码链接: 购物车1.0

全部的类:















运行结果:



下次目标:根据商品分类,建立索引吧。

2. ManagerTest.zip代码分析(继承、多态)

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

2.1 简述文件中表现出的继承关系。哪些是共有方法,哪些是子类特有的属性和方法?

分析:EmployeeManager的父类,子类会继承父类被标记为public的成员变量及方法。

  • 类:Employee,Manager,ManagerTest
  • 继承关系:managerextendsEmployee
  • 共有方法:
public String getName()
{
return name;
}
 public Date getHireDay()
{
return hireDay;
}
 public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}
  • 子类特有的方法:
 public void setBonus(double b)
{
bonus = b;
}
 public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
  • 注意:构造函数不能被继承,只是编译器在子类的构造函数中的第一行默认加了super()方法,从而调用了父类的构造函数。

2.2 文件第26行e.getSalary(),到底是调用Manager类的还是Employee类的getSalary方法?

源程序部分代码:

staff[0] = boss;
staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
staff[2] = new Employee("Tommy Tester", 40000, 1990, 3, 15);

分析:staff[0]Manager引用类型,调用Manager类的方法。

staff[1]staff[2]Employee引用类型,调用Employee类的方法。

2.3 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,这样有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?

分析:使用super调用父类的构造函数,提高了代码的复用性,使代码更为简洁。之所以使用继承,一方面是拟定了共同的协议,另一方面也为了提高代码的复用性。

3. Object类中的toString与equals

3.1 编写Fruit类,属性String name。如果覆盖其toString()方法,其父类中的toString方法的代码就没有了吗?编写Fruit的toString()方法,在该方法中要将调用父类的toString方法得到的字符串与自己特有的属性name拼接起来,怎么编写?(使用代码展示)

分析:如果该类覆盖了父类的toString方法,其父类中的toString方法方法还是存在的,只是以该类为模板的对象输出时以该类中toString方法中的格式输出。

	public String toString() {
return "Fruit [name=" + name + super.toString() + "]";
}

3.2 为Fruit类编写equals方法覆盖父类相应方法,功能为当两个Fruit对象name相同时(忽略大小写),返回true。(使用代码证明你自己覆盖的equals方法是正确的)

代码:

package Test;

public class Fruit {
String name; public Fruit(String name) {
super();
this.name = name;
} public String toString() {
return "Fruit [name=" + name + super.toString() + "]";
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Fruit other = (Fruit) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equalsIgnoreCase(other.name))
return false;
return true;
} public static void main(String[] args) {
Fruit a=new Fruit("apple");
Fruit b=new Fruit("Apple"); System.out.println("a name="+a.name);
System.out.println("b name="+b.name);
System.out.println("a.name==b.name "+a.equals(b)); } }

运行结果:

3.3 完成3.2后,使用ArrayList fruitList存储多个fruit,添加时要求如果要添加的fruit对象在fruitList中已存在就不添加,不存在就添加。编写相关测试代码。并分析ArrayList的contains代码与equals方法有何关系?

提示:直接使用ArrayList的contains方法实现判断对象是否存在。


import java.util.ArrayList;
import java.util.Scanner; public class Fruit {
String name; public Fruit(String name) {
super();
this.name = name;
} public String toString() {
return "Fruit [name=" + name +" " +super.toString() + "]";
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Fruit other = (Fruit) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equalsIgnoreCase(other.name))
return false;
return true;
} public static void main(String[] args) {
ArrayList<Fruit> fruitList = new ArrayList<Fruit>();
Scanner sc = new Scanner(System.in); System.out.println("Begin add");
while (true) {
String name = sc.next();
if (!name.equals("exit")) {
if (fruitList.size() == 0) {
fruitList.add(new Fruit(name));
} else {
boolean b = fruitList.contains(new Fruit(name));
if(!b)
fruitList.add(new Fruit(name));
}
} else
break;
}
for (Fruit fruit : fruitList) {
System.out.println(fruit);
} } }

运行结果:

contains源代码截取:

public boolean contains(Object o) {
return indexOf(o) >= 0;
} /**
* Returns the index of the first occurrence of the specified element
* in this list, or -1 if this list does not contain the element.
* More formally, returns the lowest index <tt>i</tt> such that
* <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>,
* or -1 if there is no such index.
*/
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;
}

分析:contains在底层也调用了equals方法。

4. 实验总结:

4.1 PTA编程题(形状-继承)。并回答:在本题中使用多态为编程带来了什么好处。

多态体现为两种方式:重写和重载

重写是父子类之间多态的体现,它的好处就是可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

重载是本类之间多态的体现,它的好处是可以满足用户在针对同一对象可以调用同一方法的不同功能体现,以最大限度适应用户的不同需求

4.2 PTA编程题(覆盖)。并回答:编写eqauls方法是需要注意些什么?

1、自反性:对于任何非空引用x,x.equals(x)应该返回true。

2、对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true。

3、传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。

4、一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果。

5、非空性:对于任意非空引用x,x.equals(null)应该返回false。

4.3 程序填空、函数题(1-3)。

  • 5-1程序填空

  • 6-1面向对象基础-覆盖与toString

总结:使用super.toString()调用父类的toString方法。

  • 6-2面向对象基础-Object

总结:多态的基本使用。

  • 6-3面向对象基础-覆盖与equals

总结:自己写的方法肯定是不如自动生成的全面,不过要先自己尝试写,之后在对照自动生成的代码。

3. 码云及PTA

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

3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图





3.3 统计本周完成的代码量



周次 总代码量 新增文件代码量 总文件数 新增文件数
1 665 20 20 20
2 1705 23 23 23
3 1834 30 30 30
4 1073 1073 17 17

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

  1. Java程序设计第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...

  2. 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结

    <面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...

  3. 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...

  5. 20155318 2016-2017-2 《Java程序设计》第九学习总结

    20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...

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

    <Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...

  7. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  8. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  9. 20145120黄玄曦 《java程序设计》 寒假学习总结

    1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...

  10. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

随机推荐

  1. solr5.3的spellcheck功能

    1.增加schema.xml中的检查字段. <field name="title" type="text_cn" indexed="true&q ...

  2. RNN循环神经网络结构

    note: RNN处理有序的数据.例如一句话 一层双向的循环神经网络示意图(没有 S0' 则为单层循环): 正向循环S0 到 Si:y1的值受X1,A1以及上一层的A0影响 反向循环Si 到 S0:y ...

  3. [Dart] Flutter开发中的几个常用函数

    几个Flutter开发中的常用函数 /** 返回当前时间戳 */ static int currentTimeMillis() { return new DateTime.now().millisec ...

  4. 12.mysql高级查询

    1. mysql 支持三种类型的连接查询: on 后面跟的是关联条件 内连接查询 select s.name,c.name from students as s inner join classes ...

  5. oracle使用随笔

    一,centos 7安装桌面环境 首先使用命令yum grouplist查看可以使用的group ,第一步,命令安装Gnome Desktop,第二步,yum groupinstall "X ...

  6. RAD 10.1多标签页bug

    frm->Parent= ActiveControl取不到了 ::setparent(frm-> 多屏幕显示器,次副屏幕上无法最大化了. ::SetParent(myform->Ha ...

  7. menu 一组 只能选择一个

    menu 一组 只能选择一个 将属性表的 groupindex 给一个值,假设你有三个Lang选项 就把这三个 manuitemex.groupindex 都设成同一个编号 (ex: 10) 以及把 ...

  8. Eclipse launch configuration----Eclipse运行外部工具

    虽然我们已经有了像 Eclipse 这样高级的 IDE,但是我们有时候也是需要在开发的时候使用 Windows 的命令行,来运行一些独立的程序.在两个程序中切换来切换去是很麻烦的.所以 Eclipse ...

  9. Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To sta

    有三种导致这种错误的原因. 第一个: 是因为tomcat的服务没有被关闭所导致的,将服务关闭即可 找到tomcat的安装目录,进入bin文件夹,找到tomcat7w.exe,双击这个文件,点击stop ...

  10. python之内置函数:map ,filter ,reduce总结

    map函数: #处理序列中的每个元素,得到的结果是一个'列表',该列表元素个数及位置与原来一样 filter函数: #遍历序列中的每个元素,判断每个元素得到一个布尔值,如果是true,则留下来 peo ...