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

    1. 本周学习总结

    1.1 尝试使用思维导图总结有关继承的知识点。

    1.2 使用常规方法总结其他上课内容

    类设计:属性设计类型为priate并初始化。
    文档注释:以/*开始,以*/结束。
    继承:存在的本身是为了减少重复代码以免冗长增加不便;
          单继承性,并继承所有成员;
          出现覆盖时用supper调用父类,会根据对象的类型来选择进行父类或子类的函数;
          创建子类时父类构造函数自动调用;
          覆盖与重载的区别:覆盖是子类重新定义父类已存在的函数或进行更改,重载是同一个类中一样的函数名不一样的名称。
          final与abstract:final不能被继承,final修饰的类没有子类,因此不能引用此类的对象;
                          abstract必须被继承,与final相反,不能new创建实例。
          抽象方法:抽象方法的类一定是抽象类,抽象类的方法不一定都是抽象方法。
          object:toString-默认调用,一般自定义覆盖;
                 equal-判断对象是否有相同引用;
                 hashCode-将对象插入散列表,equal方法改变也须改变哈希方法。
    

    2. 书面作业

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

    类的注释:

    方法的注释:

    2、面向对象设计
    2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)

    a、月末了打开手机淘宝屯粮;
    b、点开天猫超市,选择食品饮料的饼干糕点;
    c、将中意的商品全部加入购物车;
    d、打开购物车发现满88包邮,返回购物界面继续添加商品;
    e、结账时又发现购物券满150-20,继续挑选;
    f、根据总计金额增删商品使最接近150;
    g、确认收货人信息及收货地址,付款成功。
    

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

    2.2 我发现年轻人及中年人在用这个系统,系统中包含淘宝(父类),其子类有天猫,口碑外卖等。父类的属性有产品,购物车,订单,收货信息等。
    

    类与属性的思维导图:

    3、ManagerTest.zip代码分析
    分析ManagerTest.zip中的代码,回答几个问题:
    3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。

    方法的复用:super(n, s, year, month, day)复用了父类的有参构造函数public Employee(String n, double s, int year, int month, int day);
                double baseSalary = super.getSalary()复用了父类的public double getSalary();
    属性的复用:class Manager extends Employee复用了父类的private String name; double salary; Date hireDay;
    

    3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?

    Manager-getSalary()
       {
          double baseSalary = super.getSalary();
          return baseSalary + bonus;
       }
    Employee-getSalary()
       {
          return salary;
       }
    Employee类setSalary其实是Manager的baseSalary,Manager的salary还包括Bonus;
    在调用setSalary函数时,系统会根据该方法的实际对象类型进行调用。
    

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


    运行结果如上:
    通过工资的输出可以得知当执行到staff[0]时,e.getSalary是调用的Manager类的getSalary方法(其方法中还调用了Employee类的getSalary方法)因为初始化是这样的Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);staff[0] = boss;
    当执行到staff[1],staff[2]时是调用的Employee类的getSalary方法。
    

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

    从直观上讲,用一句super(n, s, year, month, day);代替了private String name;private double salary;private Date hireDay;三句,减少了代码的冗长繁琐,并且可以直观的看出Manager和Employee之间的继承关系。
    直接将代码复制到Manager构造函数中,对setSalary函数需要重新书写浪费代码的空间。
    

    4、Object类

    4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?

    运行结果如上,调用了Object的toString类,因为所有的类都是默认继承自Object类,toString实现了该对象的字符串,equal比较对象是否是相同的引用,clone实现复制该对象。
    

    4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
    这是添加了toString()方法,父类的toString方法还在,只是被覆盖了,创建该对象时调用的是对象里的toString().

    这是复用父类的toString(),只需要用到super关键字就可以:

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

    Object-eqauls:用于比较两个对象的地址值是否相同,值相等或所属一个对象返回true,另一个对象就返回false.
    

    覆盖的equal方法及运行结果如下:

    4.4 在4.3的基础上使用ArrayList fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?
    测试代码如下:

    public boolean contains(Object o) { 
    return indexOf(o) >= 0; 
    } 
    由上源代码可看出contains的实现是调用了indexOf这个函数,通过查找是否含有该元素返回true or false.
    

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

    5.1 画出类的继承关系

    5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
    运行结果如下:

    原因分析:
    推测运行结果应该是按年龄排序输出,原因是四个成员对象都继承了person这个抽象类,有其共同的属性和方法,新建指向对象时自动调用了person类的构造函数并打印。
    

    5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?

    作用是调用子类所继承的父类的函数,不行,去掉了会出现编译错误,因为子类中没有编写构造函数,去掉之后缺乏完整性。
    

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

    1、子类的构造函数中用super调用父类的构造函数;
    2、多态可以防止出现多次重复的代码,如果没有多态性,若继承父类的子类有多个,则每个子类都要编写重复的代码,这样就显得冗余;
    3、有关系,没有继承就没有多态,子类要先继承于父类才能调用父类的属性及方法。
    

    3. 码云代码提交记录

    4. PTA实验总结

    1、使用继承需要些extends,不能写在同一个类里面就默认是继承了;
    2、如何创建一个数组可以存放不同类型的对象可以用object型,因为所有类都默认继承于object。object真强大。
    3、码云最近总是提交不上去,只能手动上传文件。
    4、函数第二题

    一定根据题目粘贴代码
    5、不能用new创建抽象派的实例。

  • 相关阅读:
    容器操作--管理迭代器
    顺序容器--添加及访问元素
    日志记录-20151103
    顺序容器--容器库.迭代器
    使用-flat.vmdk恢复虚拟机
    H3C-交换机维护命令大全
    Centos6.5 安装zabbix-agent 3.0
    Linux系统调试工具之sysdig使用详解
    通过实例学习 tcpdump 命令
    系统之锹sysdig:Linux服务器监控和排障利器
  • 原文地址:https://www.cnblogs.com/201521123065hyw/p/6562172.html
Copyright © 2011-2022 走看看