学号20155311 2016-2017-2 《Java程序设计》第4周学习总结

教材学习内容总结

6.1 何谓继承

  • 何谓继承 面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承,滥用继承而导致程序维护上的问题时有所闻。如何正确判断使用继承的时机,以及继承之后如何活用多态,是学习继承时的重点。:

  • 通过extends继承的父类可以是不加abstract关键字的普通类,也可以是加了abstract关键字的抽象类。继承普通类时可以覆写父类的方法,或者创建自己独有的方法,或者这两者都不使用。继承抽象类时,必须覆写抽象类中的全部抽象方法

6.2

  • protected 被声明为 protected 的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取;Java中,有3个权限关键字,但实际上有4个权限范围,因为没有定义权限关键字,默认就是包范围。

  • 重新定义的细节 要注意,对于父类中的方法权限,只能扩大但不能缩小(即若原来成员为 public,则子类中重新定义时不可为 private 或 protected);在 Java中,如果想取得父类中的方法定义。可以在调用方法前,加上 super 关键字; static 方法属于类拥有,如果子类中定义了相同签署的 static 成员,该成员属于子类所有,而非重新定义, static 方法也没有多态。

  • 关键词final

  • final可以用于修饰变量、方法和类,表示被修饰的东西只能做一次初始化,之后不能发生改变

  • 当final修饰方法参变量时,表示方法中不会对参变量的值做修改

  • final修饰的静态成员变量必须在声明时或在静态初始化块中初始化

  • final修饰的方法在继承过程中不能被覆写

  • final修饰的类不能被其他类继承

  • final类没有子类,final类的成员方法不会被覆写,final类的成员变量却不一定是常变量象。

7.1 何谓接口

  • 定义形式:interface interfaceName {…}
    ,成员方法默认为抽象的、公有的,成员属性默认为静态的、final修饰的,接口只是提供一种形式,具体的实现细节交由它的类完.由于接口不涉及具体的实现,因此在接口中的成员变量是静态常变量,默认为static和final修饰,类实现一个接口:class MyClass implements A, B, C

  • 一个类可以实现多各个接口
    注意:虽然在接口中没有显式声明方法是公有的,但接口中默认的访问控制是公有的,而类中默认的访问控制是包内友好,所以必须在类中将这个方法用public修饰

  • 接口和抽象类的选择:

  1. Java中类之间不支持多继承,但类可以实现多个接口

  2. 若类需要包含一些方法的实现,必须实现为抽象类,其他情况两者皆可,优先选择使用接口,使程序更加易于扩展

7.2 接口语法细节

  • 使用interface来定义抽象的行为外观,方法要声明为public abstract,无须且不能有操作。为了方便,也可以省略public abstract,编译程序会协助补齐。可以使用接口枚举常数,只能定义为public static final。为了方便,也可以省略public static final。
  • 接口可以继承别的接口,也可以同时继承两个以上的接口,也是使用extends关键字。
    enum语法可用于定义枚举常数,enum实际上定义了类,而enum中列举的常数实际上是public static final,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。

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

  • 不了解重载和覆盖的区别

  • 在百度和多方询问之后才得知:

    1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int, float), 但是不能为fun(int, int));
    2、不能通过访问权限、返回类型、抛出的异常进行重载;
    3、方法的异常类型和数目不会对重载造成影响;

代码托管http://git.oschina.net/bestiisjava2017/gaoziyun20155311/tree/master/javadashabi/out/production/javadashabi?dir=1&filepath=javadashabi%2Fout%2Fproduction%2Fjavadashabi&oid=0e3cc2618a97058f2a9b77cd7d275b4923f03992&sha=a23d4f1061b5595c0ce40ecd7ce57e544962482c

  • 代码提交过程截图:
    • 运行 git log --pretty=format:"%h - %an, %cd : %s" 并截图

上周考试错题总结

1.“30”转化为byte类型的30的语句是(Byte.parseByte(“30”);)。

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

  这周感觉学习比较吃力,抽象的东西越来越多,理解上难度也逐渐增加。如:对象、封装等概念,即使读了,也不能完全理解。也不能再吃C语言的老本,需要我投入更多的时间和精力,我需要更多的去展开去学习,不能仅仅局限在看书,码代码上,不懂的地方,我会先码着码,好先留存着问题,去与同学进行交流。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20 hello java
第二周 300/500 2/4 18/38 流程控制
第三周 500/1000 3/7 22/60 类与对象、封装
第四周 300/1300 2/9 30/90 继承、接口
posted @ 2017-03-19 20:41  Gaoziyun  阅读(209)  评论(0编辑  收藏  举报