教材学习内容总结
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修饰- 接口和抽象类的选择:
Java中类之间不支持多继承,但类可以实现多个接口
若类需要包含一些方法的实现,必须实现为抽象类,其他情况两者皆可,优先选择使用接口,使程序更加易于扩展
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 | 继承、接口 |