201621123005《Java程序设计》第四周学习总结

201621123005《Java程序设计》第四周学习总结

标签(空格分隔):


1.本章学习总结

1. 面向对象设计
1.1 写出你认为本周学习中比较重要的知识点关键词
继承、多态、覆盖、extend
1.2 尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。

  1. 书面作业

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 fruitList存储多个fruit,添加时要求如果要添加的fruit对象在fruitList中已存在就不添加,不存在就添加。编写相关测试代码。并分析ArrayList的contains代码与equals方法有何关系?
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

posted on 2017-10-14 17:46  网路1611张凯艳  阅读(154)  评论(4编辑  收藏  举报

导航