zoukankan      html  css  js  c++  java
  • 201521123017 《Java程序设计》第4周学习总结

    1. 本周学习总结





    2. 书面作业

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

     



    Q2.面向对象设计(大作业1,非常重要)
    2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
    2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
    2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)

     
    (2.1)网上商城购物:买家首先输入所要的商品,在Shopping类在中,找到商品这个属性中(用Commodity类定义的商品属性,包含商品的名称,价格,商品的大小及商品的所在地址),卖家观看此商品的介绍,若为所需物品,则加入购物车,用到Shopping类中的shopcar属性(Shopcar类定义,包含所加入的商品的单价,购买的个数及存放商品的地址),在购物车中查看订单情况,若发现不需要,可以删去订单,计算总共的话费时,在Shopping类的total方法中计算,各类商品的单价*个数总和,返回该值显示给买家看,买家付相等金额后完成购物过程
     
    (2.2)


    **Q3.ManagerTest.zip代码分析 分析ManagerTest.zip中的代码,回答几个问题: 3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。 3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢? 3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。 3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?**   `(3.1)class Manager extends Employee()类,Manager继承Employee;Manager属性比Employee多了bonus,private double bonus;定义构造函数时public Manager(String n, double s, int year, int month, int day),由于Manager的全部属性除bonus以外其他都一样,故可以继承父类的构造函数来赋值,用super(),但要放在构造函数第一行才行;在调用函数时,Manager类中方法,public double getSalary(),覆盖Employee的方法getSalary(),Manager类中getSalary()中还有加入bonus`   `(3.2)主要区别是有无bonus,有bonus则是Manager类中的方法getSalary(),无则是Employee类的方法getSalary()`   `(3.3)调用Employee类的getSalary方法,定义boss时,boss.setBonus(5000)已经将bonus带入getSalary()中计算,再将boss赋给staff[0],得到的奖金已是用Manager类的getSalary方法计算过的,调用时的是Employee类的getSalary方法`   `(3.4)可以省略与父类中相同的属性的构造函数的编写,节约成本,简洁代码;复制过去虽然直观但是会使执行时间过长,运行过慢`
    **Q4.Object类 4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能? 4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示) 4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的) 4.4 在4.3的基础上使用ArrayList fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?**   `(4.1)System.out.println(new Fruit());语句调用了Fruit的构造函数;在未写构造函数时,系统会默认调用构造函数;输出类名加地址形式`   `(4.2)新增的toString方法只是将String类中toString覆盖掉,并非没有,可以查找String类中toString方法的源代码,在类中输出` ![](http://images2015.cnblogs.com/blog/1109821/201703/1109821-20170317213922948-102478467.png)   `(4.3)eqauls方法是比较两个对象的内容是否相同(有分大小写),若相同,则返回true,否则返回false` ``` public boolean equals(String name1,String name2) { if(name1.equalsIgnoreCase(name2)) return true;//使用String类中的.equalsIgnoreCase()函数,忽略大小写 else return false; }
     
    `
    (4.4)代码:`
    

    public class Main
    {
    public static void main(String[] args)
    {
    ArrayList fruitList=new ArrayList();//建立ArrayList fruitList
    fruitList.add(new Fruit());//加入new Fruit()
    Fruit a=new Fruit();
    if(!fruitList.contains(a)) fruitList.add(a);//若fruitList没有a,则加入a,否则不操作
    }
    }

    
    
    
    `ArrayList的contatins使用indexOf(),返回字符串在父串中首次出现的位置,若位置是大于等于0,返回true,否则返回false,ArrayList的contatins源代码`
    ![](http://images2015.cnblogs.com/blog/1109821/201703/1109821-20170317223402010-1455116158.png)
    <br>
    **Q5.代码阅读:PersonTest.java(abstract、多态)
    5.1 画出类的继承关系
    5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
    5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
    5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?**
    &nbsp;
    `(5.1)类的继承关系`
    ![](http://images2015.cnblogs.com/blog/1109821/201703/1109821-20170317225047729-792716038.png)
    &nbsp;
    `(5.2)建立Person()数组person[],长度为4,peoples[0]=new Employee,peoples[1] = new Student,peoples[2] = new Programmer,peoples[3] = new Manager,接着根据年龄大小,由小到大排序输出,与运行结果比较相同`
    &nbsp;
    `(5.3)使用super方法,可以调用在子类中方法与参数相同的父类的属性和方法;不行,若是去掉,则无法继承父类中的属性或方法,用不了,导致那些继承的属性用的是默认值`
    &nbsp;
    `(5.4)体现多态的代码:`
    

    peoples[0] = new Employee("zhang", "136", "1360", "1360@mail.com", 21, "female", 1000.0);
    peoples[1] = new Student("wang", "110", "15959", "15959@163.com", 18, "male", "1");
    peoples[2] = new Programmer("Gates", "usa", "911", "911@com", 59, "male", 100000.0, 50000.0);
    peoples[3] = new Manager("Clark", "GE", "111", "111@mail.com", 10, "mail", 90000.1, 12000.3);

    `创建父类的对象可以构造多个不同的对象(不同的类),节约成本(例如求圆和长方形的面积和周长的和,可以创建一个父类class Shape(){},存放形状属性,继承方法求面积和 和 周长和,这样可以在圆和长方形中直接用super()引用这个方法,节约成本);只有子类继承父类才能在建立对象时,有多个不同的对象(多态)`
    <br>
    <br>
    #3. 码云代码提交记录
    ![](http://images2015.cnblogs.com/blog/1109821/201703/1109821-20170318144138151-564344210.png)
    
    <br>
    <br>
    #4. PTA实验实验总结
    &nbsp;
    `(1)继承父类,在子类中使用父类的属性和方法,用extends,后接父类,在子类中,若子类要使用与父类同名却不同效果的方法时,可以自己编写方法,在调用时,会调用子类的方法,覆盖掉父类的童,同名方法`
    &nbsp;
    `(2)抽象类的定义,用到abstract关键字,且抽象类是必须被继承的,在求周长和 和 面积和就可以在抽象类中定义,求周长和 和 面积和的方法代码一样,可以在抽象类Shape中编写`
    &nbsp;
    `(3)调用父类的构造函数时(例如Manager和Employee,Manager比Employee多一个bonus,可以用super()来调用Employee的构造函数,前面的属性一样,只需再添加bonus的定义即可),要在子类的构造函数的第一行`
  • 相关阅读:
    剑指offer---链表中倒数第k个结点
    剑指offer---反转链表
    剑指offer---从尾到头打印链表
    数据结构---链表ADT C++实现
    ubuntu解压zip文件出现乱码情况解决方法
    Ubuntu终端常用的快捷键(转载)
    requsets模块的学习
    爬虫的基本知识
    谈谈我们对userAgent的看法,为什么爬虫中需要userAgent?
    git的基本使用
  • 原文地址:https://www.cnblogs.com/gemola/p/6561596.html
Copyright © 2011-2022 走看看