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

    ---恢复内容开始---

    #1. 本周学习总结 **1.1 尝试使用思维导图总结有关继承的知识点。** ![](http://images2015.cnblogs.com/blog/1109849/201703/1109849-20170318121624870-91310649.png)

    1.2 使用常规方法总结其他上课内容。
    (1)父类只能有一个,即单继承,子类继承父类的全部成员(属性和方法),可能有自己特有的属性和方法。
    (2)多态性:相同的形态,不同的行为(不同的定义)。可以对不同类型的参数产生不同的结果。
    (3)final修饰变量,表示变量的值初始化后就不能改变。

    2. 书面作业

    1.注释的应用

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

    2.面向对象设计(大作业1,非常重要)

    2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
    最近想买一些零食,于是打开了网购商城,在搜索栏里输入零食大礼包,搜到很多款式,然后仔细了解各个宝贝的详情,毕竟民以食为天。经过反复思量,最后将四包辣条加入购物车并付款,宿舍一人一包 :)。

    2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。

    3。ManagerTest.zip代码分析

    分析ManagerTest.zip中的代码,回答几个问题:
    3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。
    答:class Manager extends Employee()类,Manager继承Employee。用到了public Employee(String n, double s, int year, int month, int day)方法,并且用了name、salary、hireday属性。

    3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
    答:区别的方法是看有无bonus,有bonus的是Manager类中的方法getSalary(),无则是Employee类的方法getSalary()

    3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
    答:调用Employee类的getSalary方法。

    3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
    答:这样可以避免父类中相同属性的代码复用,可以节省空间,减少编译时间,使程序更简洁。

    4.Object类

    4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
    答:语句调用了Fruit的构造函数,如果未写该构造函数,系统会默认调用构造函数,以输出类名加地址的形式。

    4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)

    新增的toString方法将String类中toString覆盖掉了,并不是没有,可以查找String类中toString方法的源代码,在类中输出。

    4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)
    答:eqauls方法是判断两个对象的内容是否相同,相同返回true,否则返回false。

    {
        if(name1.equalsIgnoreCase(name2)) return true;//使用String类中的.equalsIgnoreCase()函数,忽略大小写
        else return false;
    }```
    
    **4.4 在4.3的基础上使用ArrayList<Fruit> fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?**
    ![](http://images2015.cnblogs.com/blog/1109849/201703/1109849-20170318174117463-2085142370.png)
    
    contains代码:
    

    public boolean contains(Object o){
    return indexOf(o) >= 0;}
    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;
    } ```
    ArrayList的contatins方法是通过用ArrayList中的每一个对象的equals方法与新添加的对象相比较判断从而实现其功能。

    5.代码阅读:PersonTest.java(abstract、多态)

    5.1 画出类的继承关系

    5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
    答:建立Person()数组person[4],peoples[0]=new Employee,peoples[1] = new Student,peoples[2] = new Programmer,peoples[3] = new Manager,然后根据年龄大小,由小到大排序输出,进而跟运行结果比较。

    5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
    答:作用是调用父类的属性和方法。super构造函数是不能去掉的,因为子类的构造方法一定会用到父类的某个构造方法,去掉就无法继承。

    5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
    体现多态的代码:

    System.out.println(person);
    }```
    ``` 多态性允许每个对象以适合自身的方式去响应共同的消息,这样就增强了操作的透明性、可理解性和可维护性。就不必为相同的功能操作但作用于不同类型的对象而费心去识别,大大提高了效率;只有子类继承父类才能在建立对象时,有多个不同的对象(多态)。```
    
    
    #3. 码云代码提交记录
    
    ![](http://images2015.cnblogs.com/blog/1109849/201703/1109849-20170318162635245-1723039637.png)
    
    
    
    #4. PTA实验
    
    题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
    函数(4-1, 4-2, 4-3,4-4较难选做)
    编程(5-4, 5-5, 5-6)
    
    ```5-4:考察运用继承与抽象类,需要用上关键词abstract,用extends,后接父类。```
    ```5-5:运用ArrayList的contains方法。```
  • 相关阅读:
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    UVA10071 Back to High School Physics
    UVA10071 Back to High School Physics
    UVA10055 Hashmat the Brave Warrior
    UVA10055 Hashmat the Brave Warrior
    UVA458 The Decoder
    UVA458 The Decoder
    HDU2054 A == B ?
    HDU2054 A == B ?
    POJ3414 Pots
  • 原文地址:https://www.cnblogs.com/ltykm/p/6575399.html
Copyright © 2011-2022 走看看