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

    1. 本章学习总结

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

    1.2 使用常规方法总结其他上课内容。
    (1)多态性:相同的形态,不同的行为
    (2)类型转换与强制类型转换(cast)

    2. 书面作业

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

    A:注释的插入:
    注释以/开始,以/结束
    类注释
    /**
    .......你要注释的内容
    /

    Q2. 面向对象设计(大作业1,非常重要)
    2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
    A:进入购物网站,搜索想要购买的商品,筛选搜索出来的商品,中意的商品选择其属性,如大小,颜色等,加入购物车,筛选完毕后,进入购物车,根据需求更改要购买商品的数目,勾选确定要购买的商品进行结算,结算时添加收货地址及联系方式,最终付款,购买成功。
    2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
    A:

    2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)
    参考资料:
    UML类图
    面向对象案例-借款者姓名地址.zip

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

    A:

    public Manager(String n, double s, int year, int month, int day)
       {
          super(n, s, year, month, day);
          bonus = 0;
       }
    
       public double getSalary()
       {
          double baseSalary = super.getSalary();
          return baseSalary + bonus;
       }
    
    public Employee(String n, double s, int year, int month, int day)
       {
          name = n;
          salary = s;
          GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
          hireDay = calendar.getTime();
       }
    
     public double getSalary()
       {
          return salary;
    

    复用方法为 getSalary
    复用属性为

    private String name;
    private double salary;
    private Date hireDay;

    3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
    A:如果子类和父类的某个方法签名相同,那么调用父类方法应该使用super.geetSalary()
    3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
    A:根据此时e的类型判断,调用的是Employee类的getSalary方法
    3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
    A:节省时间和空间,避免代码看起来过于繁琐

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

    调用Fruit的toString()的方法;因为toString()是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”
    4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
    A:

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

    public class Main {
    
        public static void main(String[] args) {
            Fruit a=new Fruit("Kantai Collection");
            Fruit b=new Fruit("KANTAI COLLECTION");
            Fruit c=new Fruit("World of Warships");
            System.out.println(a.equals(b));
            System.out.println(a.equals(c));
        }
    }
    class Fruit{
        String name;
        public Fruit(String name){
            this.name=name;
        }
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Fruit other = (Fruit) obj;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equalsIgnoreCase(other.name))
                return false;
            return true;
        }
    }
    

    运行结果

    ture
    false
    

    Q5. 代码阅读:PersonTest.java(abstract、多态)
    5.1 画出类的继承关系

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

    5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
    A:作用是调用父类的构造函数;不可以去掉
    5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
    参考文件:PersonTest.java

    A:体现在main函数中对peoples数组的相关操作,既可以使用Person类型操作Student对象,也能使用Person类型操作Employee对象;
    好处有:可替换性。多态对已存在的代码具有可替换性。
    可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际 上新加子类更容易获得多态功能。  
    接口性。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。  
    灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。  
    简化性。多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定。
    关系:多态需要有父类子类的继承关系的前提,才能实现使用单一接口操作多种类型的对象

    3. 码云上代码提交记录

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

    4.PTA实验

    题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
    函数(4-1, 4-2, 4-3,4-4较难选做)
    编程(5-4, 5-5, 5-6)
    一定要有实验总结
    A:打代码的过程中还是会遇到很多的问题,eclipse的很多方法没有掌握,尤其是一些小技巧,使得在编程过程中浪费了很多时间,没能实现高效作业,在将课堂学习的只是运用到编程的过程具体操作起来还是比较困难,会有很多平时注意不到的小问题,所以还需要多加练习,多问同学。

  • 相关阅读:
    Json对象与Json字符串互转(4种转换方式)
    Web.config配置文件详解
    jQuery BlockUI Plugin Demo 6(Options)
    jQuery BlockUI Plugin Demo 5(Simple Modal Dialog Example)
    jQuery BlockUI Plugin Demo 4(Element Blocking Examples)
    jQuery BlockUI Plugin Demo 3(Page Blocking Examples)
    jQuery BlockUI Plugin Demo 2
    <configSections> 位置引起的错误
    关于jQuery的cookies插件2.2.0版设置过期时间的说明
    jQuery插件—获取URL参数
  • 原文地址:https://www.cnblogs.com/wangyan12345/p/6568402.html
Copyright © 2011-2022 走看看