20155207 2006-2007-2 《Java程序设计》第4周学习总结

教材学习内容总结

  • ISP原则:一个类对另一个类的依赖应该限制在最小化的接口上。
  • OCP原则:软件构成(类,模块,方法等)向扩展行为开放,向修改行为关闭。
  • Is-a原则:指的是类的父子继承关系,例如类A是另一个类B的子类(类B是类A的父类)。
  • LSP原则:子类必须能够用来当作基类使用。如果类A继承类B,任何能使用A的地方,B也同样可以使用。

理解继承、封装、多态

继承

子类继承父类中所以的属性和方法,但是对于private的属相和方法,由于这个是父类的隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。很多时候,可以理解为,没有继承。

  • 关键字extends:表示子类会继承父类的行为,并可能在父类的基础上扩充一些行为。

  • is—a关系:子类只能继承一个父类。子类和父类间会有一个is—a的关系,中文成为“是一种”。

    检查语法逻辑是否正确,方式是从=号右边往左读:右边是不是一种左边呢?(即右边类是不是左边类的子类)

继承语法细节
  • 变量被定义成private,无法直接在子类中存取,只能通过getName()、getLevel()、getBlood()来取得。

  • 如果方法中没有同名参数,this可以省略,不过基于程序可读性,this更易读。

java.lang.Object
  • toString:toString()方法返回该对象的字符串表示。toString()是由对象的类型和其哈希码唯一确定,同一类型但不相等的两个对象分别调用toString()方法返回的结果可能相同。
  • equlas:equlas()方法的正确理解应该是:判断两个对象是否相等。重写equals()方法必须重写hasCode()方法。
  • hashCode:hashCode()方法返回一个整形数值,表示该对象的哈希码值。两个对象相等 <=> equals()相等 => hashCode()相等。因此,重写equlas()方法必须重写hashCode()方法,以保证此逻辑严格成立,同时可以推理出:hasCode()不相等 => equals()不相等 <=> 两个对象不相等。
  • instanceof:如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false
多态
  • 什么是多态?以抽象讲法解释,就是使用单一接口操作多种类型的对象。

在showBlood()方法中,既可以通过Role类型操作SwordsMan对象,也可以通过Role类型操作Magician对象。

UML:

它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 UML是一种建模语言,而不是一个开发过程。

覆盖(Override):

覆盖(Override)与重载(overload)的区别:覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用;重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。

重新定义行为
  • 什么是重新定义?在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这被称为重新定义。
  • 将子类中方法提升至父类中定义,子类引用该方法要重新定义fight()的实际行为
权限关键字protected
  • 被生命为protected的成员,相同包中的类可以直接存取‘不同包中的类可以在继承后的子类直接存取。

  • 在java中,如果想取得父类中的方法定义,可以在调用方法前,加上super关键字

-使用super关键字调用的父类方法,不能定义为private(因为这就限定只能在类内使用)

重新定义方法要注意,对于父类中的方法权限,只能扩大不能缩小。若原来成员public,子类重新定义时不可为private或protected

  • 关于private、protected、public
构造函数
  • 如果想执行父类中某构造函数,可以使用super()指定,例如

  • 如果子类构造函数中没有制定执行父类中哪个构造函数,默认会调用父类中无参数构造函数

P176
class Some {
some() {
System.out.println("调用Some()");
}
}
class Other extends Some {
Other() {
super();
System.out.println("调用Other()");
}
}
抽象方法、抽象类
  • abstract:如果某方法区块中真的没有任何程序代码操作,可以使用abstract便是该方法为抽象方法,该方法不用撰写{}区块,直接“;”结束即可。

  • abstract修饰的类为抽象类,其除了不能通过new实例化对象外,和一般的类没有什么不同。可以有静态成员(静态方法,静态变量)一般成员,构造方法,可以被继承,另外还可以有abstract修饰的方法,类中含有 abstract修饰的方法只能是abstract类。与接口比较,它是单继承的,接口是多实现的

  • JAVA中规定内含抽象方法的类,一定要在class前标示abstract。子类如果要继承抽象类,对于抽象方法有两种做法:第一种做法是继续标示该方法为abctract(在class钱标示abstract);另一种是操作抽象方法。

final关键字
  • 在指定变量值之后,就不想在改变变量值,;可以在声明变量时加上final限定。

  • 如果对象数据成员被声明为final,但没有明确使用=指定值,那么表示延迟对象成员值的指定,在构造函数执行流程中,一定要有对该数据成员指定值的动作,否则编译错误。

  • 子类不可以重新定义final方法

接口与多态

何为接口?

接口就是一段程序中可能有很多类会有共同的行为,但这些类本身并不具有任何关系,如果使用继承的话程序架构会不合理,所以使用统一的接口表示这些类具有共同的行为

接口(interface)定义行为:

接口与类属于同一层次,实际上,接口是一种特殊的抽象类。

implements:是实现接口的方法。

思考题:接口与抽象类的别?

接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。

教材学习中的问题和解决过程

  • 第六章:继承和多态有什么区别?

继承,子类继承父类中所以的属性和方法,但是对于private的属相和方法,由于这个是父类的隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。很多时候,可以理解为,没有继承。

多态:就是父类引用可以持有子类对象。这时候只能调用父类中的方法,而子类中特有方法是无法访问的,因为这个时候(编译时)你把他看作父类对象的原因,但是到了运行的时候,编译器就会发现这个父类引用中原来是一个子类的对像,所以如果父类和子类中有相同的方法时,调用的会是子类中的方法,而不是父类的。

  • 第七章:接口的作用?

接口的作用简单一点就是:接口是用来标记类的,不同的类属于不同的接口(通过向上转型),管理接口比管理各种各样的类方便多了,接口体现了抽象的观点

代码调试中的问题和解决过程

代码托管

  • 代码提交过程截图:

  • 代码量截图:

上周考试错题总结

    1. 填空:Linux Bash中,(grep )命令可以进行全文搜索
    1. CH04 填空:p104 CopyArray.java 中修改int [] scores2 = Arrays.copyOf(scores1, scores1.length,使得输出的第二行只有前五个元素,修改后的代码为(int [] scores2 = Arrays.copyOf(scores1, scores1.length/2) 或int [] scores2 = Arrays.copyOf(scores1, 5) )
  • CH05 判断:private不能用在构造方法上,这样就无法创建对象了。(X)
  •   CH05 填空:Java中成员方法中引用成员变量,要使用(this)关键字

其他(感悟、思考等,可选)

  • 本周最大的进步就是在敲代码是不是一味的抄书,而是加入了自己的思考。
  • 我觉得在此基础上我还应该增加学习代码的速度

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/200 2/2 20/20
第二周 186/400 2/4 18/38
第三周 875/600 3/7 22/60
第四周 1117/1300 2/9 30/90

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料

20155207 2006-2007-2 《Java程序设计》第4周学习总结的更多相关文章

  1. 20155207王雪纯 2006-2007-2 《Java程序设计》第二周学习总结

    20155207王雪纯 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 整数类型:short(占2字节).int()占4字节.long(占8字节) " ...

  2. 20155207 2016-2017-2 《Java程序设计》第九周学习总结

    20155207 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立 ...

  3. 20155313 2016-2017-2 《Java程序设计》第一周学习总结

    20155313 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周的Java学习进入了一个全新的阶段,对于我这样的并没有每天花费时间钻研的同学来说,最后几 ...

  4. 20145231 《Java程序设计》第一周学习总结

    20145231 <Java程序设计>第一周学习总结 教材学习内容总结 Java三大平台Java SE,Java EE,Java ME.其中,Java SE是我们学习的基础. Java S ...

  5. 20145238-荆玉茗 《Java程序设计》第一周学习总结

    20145238 <Java程序设计>第一周学习总结 教材学习内容总结 Java三大平台:由于java领域的应用越来越广,根据不同级别的应用开发区分了不同的应用版本,后正式更名为Java ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 关于 Can't connect to MySQL server on 'localhost' (10061) 的一个解决方案

    问题描述: 使用Navicat for mysql 无法远程连接到本地数据库,提示Can't connect to MySQL server on 'localhost' (10038) . 本地服务 ...

  2. 内存池-转载自IBM

    [转载自IBM]讲的很好~推荐看看 6.1 自定义内存池性能优化的原理 如前所述,读者已经了解到"堆"和"栈"的区别.而在编程实践中,不可避免地要大量用到堆上的 ...

  3. 021.4 IO流——字节、字符桥梁(编码解码)

    默认使用的就是gbk编码,这里的例子改成了utf8编码 写入—编码 private static void writeText() throws IOException { FileOutputStr ...

  4. Hadoop学习之路(二十六)MapReduce的API使用(三)

    影评案例 数据及需求 数据格式 movies.dat 3884条数据 1::Toy Story (1995)::Animation|Children's|Comedy 2::Jumanji (1995 ...

  5. linux下搭建LAMP

    PHP命令找不到:  export PATH=$PATH:/usr/local/php/bin https://www.centos.bz/forum/thread-69-1-1.html 步骤: w ...

  6. Git创建本地分支并关联远程分支

    创建本地分支git branch 分支名 例如:git branch dev,这条命令是基于当前分支创建的本地分支,假设当前分支是master(远程分支),则是基于master分支创建的本地分支dev ...

  7. Webdriver API中文版

    Webdriver API中文版 1.1   下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGui ...

  8. SSAS中CUBE的多对多关系既可以出现在中间事实表上也可以出现在中间维度表上

    开发过SSAS中CUBE的朋友,肯定都知道维度用法中的多对多关系, 这篇文章不想详细阐述多对多关系在CUBE中的结构,详情请在网上寻找CUBE多对多关系的介绍资料. 下面是是一个典型的CUBE中多对多 ...

  9. vue项目中分享到朋友圈,调用微信接口

    虽然微信提供了jssdk,不代表可以点击按钮进行分享到朋友圈,是需要微信自带的浏览器右上角进行分享.手机浏览器需要浏览器支持分享到朋友圈的分享机制. 微信jssdk地址: https://mp.wei ...

  10. 安装 jdk

    1.打开url选择jdk1.8下载http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...