CSDN:https://blog.csdn.net/weixin_41357182

导航

201621123001《Java程序设计》第4周学习总结

1. 本周学习总结

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

关键字:继承,多态,覆盖(Override),重载(Overload),抽象类(abstract)等。

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

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

总结

  1. 了解了类的继承的基本语法。
  2. 明确父类与子类的关系,用关键字extends继承。
  3. 重载和覆盖的用法。
  4. 以及快捷键构造函数alt+shift+s等。

2. 书面作业

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

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

Answer:

  • 需求描述:小张想在宿舍囤一点零食,于是打开淘宝选择了了“百草味旗舰店”店铺,按照店铺零食类别,依次浏览坚果炒货果干蜜饯肉干肉脯糕点糖果,将喜欢的分别加入购物车,可是由于资金有限,决定删除一部分,最后下单,付款成功。

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

  • 类及属性、方法:(筛选完后有)

    零食 、坚果炒货类、 果干蜜饯类、肉干肉脯类、糕点糖果类、浏览记录、购物车添加与删除。

  • 类与类之间关系如图:

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

 //这是所有零食
class Snakes {
    String name;
    String price;
    String type;
    int amount;

    public Snakes(String name, String price, String type, int amount) {
        this.name = name;
        this.price = price;
        this.type = type;
        this.amount = amount;
    }
}
class Nut extends Snakes {
    public Nut(String name, String price, String type, int amount) {
        super(name, price, type, amount);
    }
   /*
     * other also can add
     */
}

class Meat extends Snakes {
    public Meat(String name, String price, String type, int amount) {
        super(name, price, type, amount);
    }
   /*
     * other also can add
     */
}

class Goodies extends Snakes {
    public Goodies(String name, String price, String type, int amount) {
        super(name, price, type, amount);
    }
   /*
     * other also can add
     */
}

class Fruit extends Snakes {
    public Fruit(String name, String price, String type, int amount) {
        super(name, price, type, amount);
    }
    /*
     * other also can add
     */
}

//Shoppingcart类
public class Shoppingcart {
    private Snakes snakes;
    private void add()
    {
        //……;
    }
    private void delete()
    {
        //……;
    }
    private void purchase(){
       // int cost = snakes.price * snakes.amount;

    }
}

可选:团队协作可使用git与码云。在码云中新建项目。所有队员都应在码云中该项目下均应有有提交记录。截图你们的提交记录。

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

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

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

Answer:

  • 文件中Employee是父类,Manager为子类,Manager类继承Employee类。

  • 共有方法:父类Emplyoyee中声明为public的方法就是共有方法,例如: public Employee(String n, double s, int year, int month, int day) public String getName() public double getSalary() public Date getHireDay() public void raiseSalary(double byPercent)

  • 子类特有的属性和方法:就是在子类自己内部的,例如:public Manager(String n, double s, int year, int month, int day) public double getSalary() public void setBonus(double b) 特有属性声明为:private double bonus

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

Answer:
运行代码:

运行结果:

  • 根据代码运行结果来看,staff[0]输出的是Manager类,而staff[1]和staff[2]输出的都是Employee类,因此,staff[0]调用Manager类的getSalary,而staff[1]和staff[2]调用Employee类的getSalary方法。

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

Answer:

  • super可以直接调用父类函数,由于子类无法继承父类的有参构造函数,就需要super关键字来调用。

  • 直接复制粘贴纵然直观,但是super的使用方便了许多啊,完美的解决了代码重复的问题,对后期需要补充修改也方便更不易出错。

3. Object类中的toString与equals

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

Answer:父类的toString方法代码依然存在,只是被覆盖了。
代码展示:

    public String toString() {
        return super.toString() +" \t" +"Fruit{" + "name = "+ name  + '}';
    }

运行结果:

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

Answer:
equals方法代码:

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Fruit fruit = (Fruit) o;

        return name != null ? name.equalsIgnoreCase(fruit.name) : fruit.name == null;//用equalsIgnoreCase方法来忽略大小写
    }

证明:

public static void main(String[] args) {
        Fruit fruit1 = new Fruit("name");
        Fruit fruit2 = new Fruit("Name");
        System.out.println(fruit1.equals(fruit2));
        }

输出:

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

public class Main5 {
    public static void main(String[] args) {
        ArrayList<Fruit> fruitArrayList = new ArrayList<Fruit>();
        Fruit[]fruits = new Fruit[10];
        fruits[0] = new Fruit("apple");
        fruits[1] = new Fruit("Apple");
        fruits[2] = new Fruit("apPle");
        fruits[3] = new Fruit("orange");
        fruits[4] = new Fruit("Orange");
        fruits[5] = new Fruit("banana");
        fruits[6] = new Fruit("pear");
        fruits[7] = new Fruit("pEAr");
        fruits[8] = new Fruit("bananA");
        fruits[9] = new Fruit("apple");
        for (int i = 0; i < 10; i++) {
            if (!fruitArrayList.contains(fruits[i]))
            {
                fruitArrayList.add(fruits[i]);
            }

        }
        System.out.println(fruitArrayList);
        }
}

运行结果:

  • ArrayList的contains代码与equals关系:
    查看contains:

    可以发现,在contains的内部调用了equals的方法,因此我认为可以说是一种包含关系,直接使用contains方法解就可以直接判断该列表中是否包含该元素。

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

4. 实验总结:

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

Answer:在本题中,要求Rectangle与Circle类继承自Shape类,改进了7-3代码冗杂的情况,只需要在各自子类中编写鸽子的面积函数。多态带来的好处最显著的就是消除了类型之间的相互影响的关系,并且在后续需要修改的时候也更灵活。

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

Answer:编写equals方法时候需要考虑周全,不要遗漏。主要就是容易遗漏了null的情况。

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

Answer:

6-1 直接用super调用父类的toString。

6-2 本题很明确,根据题目要求一步一步来,注意是倒序输出数组判断null则不输出。

6-3 本题要求写equals方法,用自动生成后还要去修改slary的部分。

3. 码云及PTA

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

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成情况图

本周完成(形状-继承,覆盖)
需要有两张图(1. 排名。2.PTA提交列表)

3.3 统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
1 374 374 5 5
2 889 515 15 10
3 1417 528 22 7
4 1838 421 27 5
需要将每周的代码统计情况融合到一张表中。

posted on 2017-10-14 11:26  一个0010  阅读(287)  评论(3编辑  收藏  举报