201621123005《Java程序设计》第四周学习总结
201621123005《Java程序设计》第四周学习总结
标签(空格分隔):
1.本章学习总结
1. 面向对象设计
1.1 写出你认为本周学习中比较重要的知识点关键词
继承、多态、覆盖、extend
1.2 尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。
- 书面作业
1. 面向对象设计
1.1 讲故事:用50字以上讲一个你在网上商城购物或者在班级博客进行学习的故事。使用Markdown的加粗标记把关键名词标注出来,使用语句块标记把里面关键的动词标注出来。
用户进入淘宝,在淘宝搜索
一栏输入自己需要购买的产品,然后浏览产品,选中自己想要的产品,并将它加入购物车,如想还需购买产品,则继续挑选产品,直到将自己所想要买的产品全部加到购物车,最后点击要购买的所有产品结算
。
1.2 找出系统中包含的类及其属性、方法,类与类之间的关系,并绘制相应类图。
类:购物车、产品、搜索
属性:用户名、密码、价钱、商品名称
方法:添加、删除
1.3 使用Java代码实现这个系统(不必很完善)。粘贴运行截图与关键代码。将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。合作完成:2-3人一个小组。
class Goods {
private double money;
private String numbers;
public Goods(double money, String numbers) {
super();
this.money = money;
this.numbers = numbers;
}
}
public class Car {
private Goods goods ;
public static void Add() {
}
public static void Cut() {
}
public void Aadgoods() {
//...
}
public void Cutgoods() {
//...
}
public void Calculatemoney() {
//...
}
}
2. ManagerTest.zip代码分析(继承、多态)
分析ManagerTest.zip中的代码,回答几个问题:
2.1 简述文件中表现出的继承关系。哪些是共有方法,哪些是子类特有的属性和方法?
Employee是父类,Manager是子类继承与Employee
共有方法:
public Employee(String n, double s, int year, int month, int day)
{
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public Date getHireDay() {
return hireDay;
}
public void raiseSalary(double byPercent)
{
}
}
子类特有的属性private double bonus
子类特有的方法:public void setBonus(double b)
2.2 文件第26行e.getSalary(),到底是调用Manager类的还是Employee类的getSalary方法?
编译器可以动态绑定,调用时能够自动选择调用哪个方法,staff[0]
调用Manager的方法,staff[1]
和staff[2]
调用Employee中的方法。
2.3 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,这样有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
调用父类可以使代码简洁、方便,不需要每次都写相同的代码
3. Object类中的toString与equals
3.1 编写Fruit类,属性String name。如果覆盖其toString()方法,其父类中的toString方法的代码就没有了吗?编写Fruit的toString()方法,在该方法中要将调用父类的toString方法得到的字符串与自己特有的属性name拼接起来,怎么编写?
class Fruit{
private String name;
@Override
public String toString() {
return super.toString()+"\n"+"Fruit [name=" + name + "]";
}
}
public class Main6
{
public static void main(String[] args) {
Fruit fruit = new Fruit();
System.out.println(fruit.toString());
}
}
3.2 为Fruit类编写equals方法覆盖父类相应方法,功能为当两个Fruit对象name相同时(忽略大小写),返回true。(使用代码证明你自己覆盖的equals方法是正确的)
equalsIgnoreCase忽略大小写比较
package chap05;
class Fruit{
private String name;
public Fruit(String name) {
super();
this.name = name;
}
@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 class Main6 {
public static void main(String[] args) {
Fruit fruit1 = new Fruit("aPPLE");
Fruit fruit2 = new Fruit("APple");
System.out.println(fruit1.equals(fruit2));
}
}
3.3 完成3.2后,使用ArrayList
contains比较 随equals改变
public class Main6 {
public static void main(String[] args) {
ArrayList<Fruit> fruitList = new ArrayList<Fruit>();
Fruit[] fruit = new Fruit[5];
fruit[0] = new Fruit("banana");
fruit[1] = new Fruit("Banana");
fruit[2] = new Fruit("apple");
fruit[3] = new Fruit("Apple");
fruit[4] = new Fruit("orange");
for(int i=0;i<fruit.length;i++){
if(fruitList.contains(fruit[i])==false)
fruitList.add(fruit[i]);
}
for(int i=0;i<fruitList.size();i++)
System.out.println(fruitList.get(i));
}
}
4. 实验总结:
4.1 PTA编程题(形状-继承)。并回答:在本题中使用多态为编程带来了什么好处。
根据要求,本题使用继承, 实验中在自己编译器中可以运行出正确结果, 但在提交pta时出现toString
要用Eclipse自动生成的问题,但 代码确实是用Eclipse自动生成的,所以不知道为什么这道题在pta过不了。
4.2 PTA编程题(覆盖)。并回答:编写eqauls方法是需要注意些什么?
可用ArrayList
简化代码,用equals
判断是否已经存在相同值。编写equals需要注意传入参数是否为空。
3. 码云及PTA
3.1. 码云代码提交记录
3.2 截图PTA题集完成情况图
3.3 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
2 | 381 | 381 | 12 | 5 |
3 | 661 | 280 | 19 | 7 |
4 | 974 | 313 | 24 | 5 |