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

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

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

参考资料

posted on 2017-03-19 21:24  方片8  阅读(166)  评论(4编辑  收藏  举报