201521123010 《Java程序设计》第4周学习总结
1.本周学习总结
1.1 尝试使用思维导图总结有关继承的知识点。

1.2 使用常规方法总结其他上课内容。
这周上课主要学了继承,在打代码的时候对各个关键字(除了super关键字)的用法有一点混乱。对多态和继承的区别也有点混淆,努力百度中。有时候上课感觉听多了但一到打代码就啥都不会了,可能是因为没巩固好。
2. 书面作业
① 注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
①

②

② 面向对象设计(大作业1,非常重要)
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
A:
用户打开网页登录系统,浏览网页所列出的商品,经过挑选点击选择满意商品的数量与种类加入购物车。在购物车查看自己已选商品,确认数量与种类后点击结算,付账后系统将生成订单。
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。

③ 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;
   }
用到了getSalary方法,n、s、year、month、day这几个属性。
3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
A:
   父类:
   public double getSalary()
   {
      return salary;
   }
   子类:
   public double getSalary()
   {
      double baseSalary = super.getSalary();
      return baseSalary + bonus;
   }
由程序可见,父类与子类方法不同的区别是子类会用super关键字来表示,故以此来区分父类与子类。
3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。

A:
由以上截图可以看出,此行的e.getSalary()是调用Employee类的方法`。
3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
A:
自己觉得实现代码复用可以省点事,但查了一下百度,得知了:重新使用已有代码可以降低成本、增加代码的可靠性并提高它们的一致。既然如此,有了更高效的方法可以实现低成本,那如果再复制粘贴浪费空间,是没有必要的。
④ Object类
4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
A:
package ex2;
class Fruit{         //定义类为Fruit
  private String name;  //定义这个类的私有属性name(名字)
}
public class test201{
  public static void main(String[] args){  //main函数,程序运行的入口。
  System.out.println(new Fruit());
  }
}
由于没有extends自任何类,故默认继承了Object为父类,并调用了Fruit的toString()方法。
显示如下:

4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
A:
package ex2;
class Fruit{         //定义类为Fruit
  private String name;  //定义这个类的私有属性name(名字)
@Override
public String toString() {      //调用toString()方法
	return "I'M A Mango";
}
}
public class test201{
  public static void main(String[] args){  //main函数,程序运行的入口。
  System.out.println(new Fruit());
  }
}
调用了新增的toString方法后,其父类中的toString方法的代码不会没有。
若同时想用复用父类的方法,只要结合super关键字来复用即可。如return ""I'M A Mango" + super.toString();
显示结果如下:

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

package ex2;
class Fruit{         //定义类为Fruit
  private String name;  //定义这个类的私有属性name(名字)
  public Fruit(String name){
	  this.name =  name;
  }
  @Override
  public String toString() {
	return "I'M A Mango";
  }
  public boolean equals(Object obj) {
  if(this == obj)
    return true;
  if(obj == this)
    return false;
  return true;
  }
}
public class test201{
  public static void main(String[] args){  //main函数,程序运行的入口。
	  Fruit a = new Fruit("I'M A Mango");
	  Fruit b = new Fruit("I'M A mango");
          System.out.println(a.equals(a));
          System.out.println(a.equals(b));
  }
}
运行结果如下:

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

可以将其主函数改为如上图:
可以看一下ArrayList的contatins方法的源代码为:
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;
    }
 public boolean equals(Object obj) {
    return (this == obj);
    }
可以发现在contains方法会调用o.equals(elementData[i])方法来比较两个对象的引用是否相同。故功能是以此来实现的。
⑤ 代码阅读:PersonTest.java(abstract、多态)
5.1 画出类的继承关系
A:

5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
A:
会显示为:
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]]]
可以看出:继承了Person类的Student类和Employee类比继承了Employee类的Manager类和Programmer类少了一层嵌套。因为Employee类在被继承前也继承了Person类,故出现此结果。
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
A:
作用是引用当前对象的直接父类中的成员。不知道答案,故查询了一下之后总结出:其实可以不用显式的写出super,但前提是“超类中有多个构造方法,且有一个是显式写出的无参的构造方法”。但此代码中没有类符合条件,故不可以。
5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
A:
for (Person person : peoples) {
     System.out.println(person);
     }
在代码里这里体现了多态。
百度到了比较具体完整的答案:多态对已存在的代码具有可替换性、可扩充性、接口性、灵活性、简化性,可以增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。也在应用中体现了灵活多样的操作,提高了使用效率。并且简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时可以看出其优点。
我认为,多态最大的好处对于现在我们来说应该是其灵活性比较强,并且比较简便,在编写多态方法时,所有重载的方法所执行的目的是相同的,但其参数也许不同。所以可以屏蔽不同子类对象之间的差异,写出通用的代码以适应需求的不断变化。
3. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

4. PTA实验
题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
函数(4-1, 4-2, 4-3,4-4较难选做)
编程(5-4, 5-5, 5-6)
一定要有实验总结
5-4
发现对于子类的一些定义不是很清楚,一边搜索一边打代码,有时对于类与类的调用会由混淆。
5-5
这道会比5-4简单一些,按照题目要求写即可。
5-6
一看题目就比较复杂,还在写。。对ArrayList之类的实在不熟悉。
201521123010 《Java程序设计》第4周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
		
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
 - 20145213《Java程序设计》第二周学习总结
		
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
 - 20145213《Java程序设计》第一周学习总结
		
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
 - 21045308刘昊阳 《Java程序设计》第九周学习总结
		
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
 - 20145330孙文馨   《Java程序设计》第一周学习总结
		
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
 - 20145337 《Java程序设计》第九周学习总结
		
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
 - 20145337 《Java程序设计》第二周学习总结
		
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
 - 20145218《Java程序设计》第一周学习总结
		
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
 - 《Java程序设计》第九周学习总结
		
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
 - 《Java程序设计》第二周学习总结
		
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
 
随机推荐
- openstack使用openvswitch实现vxlan组网
			
openstack使用openvswitch实现vxlan openstack环境: 1 版本:ocata 2 系统:ubuntu16.04.2 3 控制节点 1个 + 计算节点 1个 4 控制节点 ...
 - Spark Streaming 调优指南
			
SparkStreaming是架构在SparkCore上的一个"应用",SparkStreaming主要由DStreamGraph.Job的生成.数据的接收和导入以及容错四大模块组 ...
 - HTML5——css基础语法
			
1.了解CSS CSS是一种用来表现HTML等文件样式的计算机语言,是对HTMl文件中设置的各种标签添加各种各样的样式与表达方式,让网页更生动,更美观. 2.导入CSS的三种方式 1.行内样式表:直接 ...
 - 360春秋杯CTF比赛WRIteUP
			
题目:where is my cat? 地址:http://106.75.34.78 访问网页出现证书错误的问题,查看证书如下: 抓包发现: Accept-Encoding: gzip, deflat ...
 - 多态性(C#)
			
在面向对象编程中继承性和多态性是重要机制,前面我为大家分享了我对“类的继承”的理解,哪么今天我就跟大家分享下我对“多态性(C#)”的理解. 首先我们先来看看多态的定义,同一操作作用于不同的对象,可以有 ...
 - 第一天的php体验
			
第一次了解php.以前对于程序猿的认知是很片面的.因为没有了解过.今天通过一天的了解交流,有了新的认知.对于这个主要应用于前端的语言还是很有兴趣的.毕竟可以亲眼看到自己做出来的网页,心里的成就感肯定满 ...
 - Hibernate——hibernate的配置测试
			
Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...
 - jumpserver V0.4.0 在CentOs7上的安装
			
基于 CentOS 7 一步一步安装 Jumpserver 0.4.0 环境 系统: CentOS 7 IP: 192.168.226.128 一. 准备Python3和Python虚拟环境 1.1 ...
 - R语言安装加载包
			
问题描述 在国内因为镜像的原因,直接使用:install.packages("plyr")往往无法成功添加安装包 解决办法 使用国内镜像进行安装,添加repo参数,参考如下: in ...
 - 解决VS2015中没有报表项(ReportViewer)的方法
			
作者:何时.微笑成了种奢求 VS2015中没有报表项(ReportViewer),怎么办?这篇文章主要为大家详细介绍了解决VS2015中没有报表项(ReportViewer)的方法,感兴趣的小伙伴们可 ...