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


    1. 本章学习总结

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

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

    Answer:
     - 上课还讲了tostring的使用,般toString用于返回表示对象值的字符串;
     - Object类中equals方法用来判断两个对象是否具有相同的引用;
     - 散列码是由对象导出的一个整型值;
     - 上课还是感觉跟天书一样,自身基础差比较笨吧,所以代码都不会打,头疼哦!
    

    2. 书面作业

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

    Q2面向对象设计(大作业1,非常重要)
    2.1将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字);
    Answer:要在网上购物,我们一般需要一台电脑或者手机,假如用的是电脑吧,当然要先打开浏览器,然后搜索购物平台,如果淘宝啊,当当啊,京东之类的,就拿淘宝举个例子吧,打开淘宝后

    如果你想购物的话在界面左上角有个“亲,请登入”;要登入淘宝账号,如果没有呢,那就比较麻烦了,需要申请淘宝账号才能进行下一步购物操作了。登入后,在淘宝网页搜索栏里面搜索,例如搜索java;

    网页里面就会有一些关于java这一本书的内容,例如价格呀,有没有包邮之类的信息,在网页的右上角还有可以选择七天退货,正品保障之类的,选好书本后,点击进去;

    就可以选择立即购买或者加入购物车,如果选择立即购买,那就买啦,只是要记得填上你的地址哦!如果是选择加入购物车,那就可以到购物车界面去结算啦!如果你觉得发现加入购物车后不喜欢这本书了,那就可以直接在购物车里面删除这本书哦!

    2.2通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
    首先我感觉应该要有一个登入类,因为进入淘宝后总是需要登入账号和密码才能够进行购物的嘛;然后应该还要有搜索类,进行搜索东西,根据输入的关键字进行搜索;还有应该有商品类,比如什么书本啊,手机之类的;还应该有个购物车类吧,进行结算,添加,删除的操作;还应该有价格排序,综合评价排序,商品是否正品保障,免邮之类的吧~(啊哈,瞎说的)。然后我感觉买完应该还有售后服务类,评价类吧~。

    2.3尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)

    public class Login{
        private String username;
        private String password;
    }
    public class Search{
        public String word;
        void search;
    }
    public class Goods{
        public String books;
        public String clothes;
        public String phones;
        ...
    }
    public class Shopping car{
        private void pay(){
        };
        private void add(){
        };
        private void delete(){
        }
    }
    public class After-sales service{
        private String evaluate;
        private void sales return(){
        }
    } 
    

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

    Answer:
     public Employee(String n, double s, int year, int month, int day)//Employee类,父类
       {
          name = n;
          salary = s;
          GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
          hireDay = calendar.getTime();
       }
    class Manager extends Employe//Manager类,出现extends关键字,继承父类,为子类
    {
       /**
        * @param n the employee's name
        * @param s the salary
        * @param year the hire year
        * @param month the hire month
        * @param day the hire day
        */
       public Manager(String n, double s, int year, int month, int day)//Manager类
       {
          super(n, s, year, month, day);//super关键字调用父类
          bonus = 0;
       }
    
       public double getSalary()
       {
          double baseSalary = super.getSalary();//super关键字
          return baseSalary + bonus;
       }
    
       public void setBonus(double b)
       {
          bonus = b;
       }
    
       private double bonus;
    }
    

    3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
    Answer:ppt上说“对于子类重写的方法,JVM根据调用该方法的实际对象的类型来决定选择调用哪个方法。”; 然后,可以用super来区分父类的getSalary和子类的getSalary;举个例子:super.getSalary()就表示父类的getSalary()方法;
    3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
    Answer:其实根据代码的运行结果,我们可以知道调用的是Manager类的getSalary;

    (不出意外这题上课讲过的,然后模模糊糊的记得)。

    该代码定义了一个employee类的staff数组,但是它将staff[0]定义为manage类中的boss,而staff[1]和staff[2]是employee类的。
    3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
    Answer:Manager类的构造函数使用super调用父类的构造函数实现了代码复用,这样可以节约打重复代码浪费的时间,如果把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,会使人阅读起来更加麻烦,冗长。
    4.Object类
    4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
    Anawer:

    输出:

    • 当我们直接输出某个对象的时候,会直接调用toString()方法;该代码是从object类来的。
    • Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。(总而言之,object类就是所有类的爸爸!)
    • 附上object类详解链接:http://baike.so.com/doc/5904392-6117294.html
      4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
      Answer:父类中的toString方法的代码肯定还存在的,如果没有了,那么其他类要调用父类的toString不就都要再重新写了吗!想要复用父类的toString用super啊!


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


    eclipse自动生成hashcode()和equals()真的太棒了,我是真滴不会how to do!嘿嘿嘿!
    5.代码阅读:PersonTest.java(abstract、多态)
    5.1 画出类的继承关系

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

    Manager [bonus=12000.3, toString()=Employee [salary=90000.1, toString()=Person [name=Clark, adress=GE, phonenumber=111, email=111@mail.com, age=10, gender=mail]]]
    Student [status=1, toString()=Person [name=wang, adress=110, phonenumber=15959, email=15959@163.com, age=18, gender=male]]
    Employee [salary=1000.0, toString()=Person [name=zhang, adress=136, phonenumber=1360, email=1360@mail.com, age=21, gender=female]]
    Programmer [allowance=50000.0, toString()=Employee [salary=100000.0, toString()=Person [name=Gates, adress=usa, phonenumber=911, email=911@com, age=59, gender=male]]]
    
    • 分析:根据思维导图可以看出来总共有五个类,但是因为abstract class Person,可以看出person是一个抽象类,所以分析其他的四个类;Employee类,Student类,Programmer类,Manager类四个类的toString()方法,我们可以发现他们具有统一的格式,就是输出自己特有的成员变量,然后调用父类的同名方法,但是Manager类和Programmer类父类Employee类继承了Person类,所以有两层嵌套!
      5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
      Answer:super的作用是调用父类的构造函数;不行,如果子类构造函数没有显式地调用父类的构造函数,则自动调用父类默认无参构造函数,如果父类无相应无参构造函数,则会出错。
      5.4 为什么Person中的getDescription要声明为abstract?
      Answer:是我眼瞎了了,为什么找不到getDescription?
      5.5PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
      Answer:多态性是指相同的形态,不同的行为(不同的定义)相同的方法名,不同的实现;父类类型变量可以引用子类对象(重要);很明显toString就体现了多态,形如:public class Employee extends Object{……};public class Manager extends Employee{……};public class Progammer extends Employee {……}就是多态。多态就是一个接口,使用不同的实例去执行不同的操作,好处就是增强程序的可扩展性及可维护性,使代码更简洁。个人感觉多态和继承没有什么关系,然后就顺便搜索了一下,不知道是否正确...(附上链接:http://wenda.so.com/q/1378229141068865?src=9999&cid-pre=1000204。)

    3. 码云代码提交记录

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

    4.4. PTA实验

    • 题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
      函数(4-1, 4-2, 4-3,4-4较难选做)
      编程(5-4, 5-5, 5-6)
    • 一定要有实验总结
      Answer:要通过super来调用父类方法;用eclipse自动生成hashcode()和equals()方法真的好用!感觉还是需要多练吧,每次都花费大量时间在Java上,打代码能力还是超级无敌差,好多编程题还没做完,会尽快完成的,每次打代码都需要请教学霸,感觉自己真的弱爆了!!可能编程真的真的真的不适合我!长时间坐在电脑面前是真滴难受哦!fighting!
  • 相关阅读:
    python numpty 中shape的用法
    卷积神经网络中参数的计算
    linux学习
    数据结构排序算法总结
    剑指offer 刷题 01
    30-大道至简——随机森林如何将分类器由弱变强
    29-用python构造一棵决策树
    28-决策树算法——简单有效的概率模型
    27-如何度量分类算法的性能好坏(Scoring metrics for classification)
    26-史上最简单的分类算法——KNN
  • 原文地址:https://www.cnblogs.com/yudi/p/6551035.html
Copyright © 2020-2023  润新知