1. 本周学习总结

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

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

多态性的应用:

instanceof运算符: 通过 instanceof判断父类引用所引用的对象实例的实际类型;将父类强制转换成子类之前,应使用instanceof进行检查或说判断。

动态绑定:运行时能够自动地选择调用哪个方法。

2. 书面作业

  • Q1.注释的应用

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

    类注释方法:

    /**

    .......注释的内容

    /



方法注释:

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

    2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。

    在京东购买耳机。打开京东购物网站,在搜索栏中输入关键字“耳机”。进一步进行精确筛选例如品牌、佩戴方式、功能用途等。确定搜索范围之后可选择按照综合、销量、评论、新品和价格这几种方式排序查看商品。找到满意的商品,点击查看详细信息,想要购买就点击“加入购物车”,最后在我的购物车中进行商品结算。

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

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

    参考资料:

    UML类图

    面向对象案例-借款者姓名地址.zip

  • Q3.ManagerTest.zip代码分析

    分析ManagerTest.zip中的代码,回答几个问题:

    3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。

      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();
    } public double getSalary()//父类Employee的函数
    {
    return salary;
    } public Manager(String n, double s, int year, int month, int day)//子类Manager中的函数
    {
    super(n, s, year, month, day);
    bonus = 0;
    } public double getSalary()//子类Manager中的函数
    {
    double baseSalary = super.getSalary();
    return baseSalary + bonus;
    }

    可见Manager类中,super(n, s, year, month, day)是利用关键字super来调用父类的构造函数对自身进行初始化,复用了name、salary、year、month、day这五个属性;double baseSalary = super.getSalary()也是调用父类方法。

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

    答:如果有重写父类的方法,调用方法是子类的,如果调用父类的需要使用关键字super.方法。

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

    答:Employee类的方法

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

    答:子类调用父类的构造方法,可减少代码量,也更简洁。

    Q4.Object类

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

      import java.util.*;
    class Fruit{
    private String name;
    }
    public class Main {
    public static void main(String[] args) {
    System.out.println(new Fruit());
    }
    }

    结果:Fruit@15db9742。

    java中,每个类都是Object的子类,而Object有个toString方法。

    在你的代码中,你直接打印了一个类,他会调用这个类的toString方法,如果你不覆盖这个方法,它就调用Object的toString方法,结果默认是这个类的类型加上内存的地址。

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

    父类toString方法仍然存在,如果想要复用其父类的toString方法,用super.调用方法即可。代码如下:

      import java.util.*;
    class Fruit{
    private String name;
    public String toString() {
    return "name "+super.toString();
    }
    }
    public class Main {
    public static void main(String[] args) {
    System.out.println(new Fruit());
    }
    }

    输出结果为:name Fruit@15db9742

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

    Object的equal类比较两个变量在内存中的指针指向是否相同,即比较两者是否为“同一个”。

      class  Fruit{
    private String name;
    Fruit(String name){
    this.name=name;
    } @Override
    public String toString() {
    return "name "+super.toString();
    } @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.equals(other.name))
    return false;
    return true;
    }
    } public class Main {
    public static void main(String[] args) { Fruit fruit1=new Fruit("apple");
    Fruit fruit2=new Fruit("apple");
    Fruit fruit3=new Fruit("watermelon");
    System.out.println(fruit1.equals(fruit2));
    System.out.println(fruit1.equals(fruit3));
    }
    }

    运行结果为:

    true

    false

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

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

    参考文件:PersonTest.java

    5.1 画出类的继承关系

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

    运行结果如图:

    Person类被abstract修饰,是一个抽象类,抽象类不能被直接实例化,只能作为其它类的父类。剩下的四个类中,Employee和Student类继承Person类的输出格式是输出自己特有的属性,然后调用父类的toString()方法;Manager和Programmer继承Employee类,所以它们的输出格式有两次嵌套

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

    (1)子类中里面使用了super构造函数,作用是调用父类的构造方法.

    (2)如果将子类中的super构造函数去掉,则编译时会调用父类无参构函数。编译出错。

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

    (1)首先每个类中都用了toString()方法,但输出结果都不相同;其次子类类型的引用变量即可以引用本类对象,也可引用父类对象。
    
    (2)
    把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。 赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

    (3)多态与继承、重载并不是孤立的,他们之间存在着紧密的联系,多态是建立继承、重载这两者的基础之上。多态应用的三个条件:继承、子类对象指向父类引用、重写。

3. 码云代码提交记录

4. PTA实验

题目集:jmu-Java-03-面向对象1-基础-封装继承 中的

函数(4-1, 4-2, 4-3,4-4较难选做)

编程(5-4, 5-5, 5-6)

一定要有实验总结

本次的收获:

4-1:用super关键字调用父类方法。

4-3:运用DecimalFormat方法保留小数、重写equal方法。

5-4:用abstract修饰类,通过继承的关系来实现代码的复用。

5-5:重写equals判断对象是否在数组中存在。

201521123042 《Java程序设计》第4周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. Linux - 简明Shell编程09 - 重定向(Redirection)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash pwd > 1.log ...

  2. python超简单的web服务器

    今天无意google时看见,心里突然想说,python做web服务器,用不用这么简单啊,看来是我大惊小怪了. web1.py   1 2 3 #!/usr/bin/python import Simp ...

  3. 关于JS递归函数细化认识及实用实例

    程序调用自身的编程技巧称为递归( recursion). 一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归 ...

  4. iconfont 使用

    阿里巴巴适量图库  http://www.iconfont.cn/ 官方帮助中有非常详细的操作指导 http://www.iconfont.cn/help/detail?spm=a313x.77810 ...

  5. 用node写一个皖水公寓自动刷房源脚本

    因为住的地方离公司太远,每天上下班都要坐很久的班车,所以最近想搬到公司旁边的皖水公寓住.去问了一下公寓的客服,客服说房源现在没有了,只能等到别人退房,才能在网站上申请到. 如果纯靠手动F5刷新浏览器, ...

  6. Oracle锁表查询与解锁

    锁表查询和解锁 --查询SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv ...

  7. Neo4J图库的基础介绍(二)-图库开发应用

    JAX-RS是一个用于构建REST资源的Java API,可以使用JAX-RS注解装饰每一个扩展类,从而让服务器处理对应的http请求,附加注解可以用来控制请求和响应的格式,http头和URI模板的格 ...

  8. synchronized VS Lock, wait-notify VS Condition

    最近在看Java Threads第三版,收获颇多.全英文阅读,感觉真的是爽歪歪.推荐大家都看看. 这一篇想系统的讲一讲,线程之间通信的2种模式,wait-notify 和 Condition. 先上一 ...

  9. 网友RHCE认证考试经历

    2014年7月,为大力推广RedHat Enterprise Linux7操作系统,红帽将基RHCE认证由RHEL6转换到RHEL7上. 面对新的软件功能.新认证课程内容,初期认证学员的考试通过率一直 ...

  10. python-opencv在有噪音的情况下提取图像的轮廓

    对于一般的图像提取轮廓,这篇博文介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加 ...