学号 2018-2019-20175212 《Java程序设计》第5周学习总结
教材学习内容总结
接口
- 声明接口:
interface 名字
; - 接口体:接口体中只有常量无变量,只有抽象方法没有普通方法;所有常量的访问权限都为
public
,且都是static常量(允许省略public
、final
、static
、修饰符),抽象方法的访问权限也都是public
。如
interface Printable {
int MAX = 100;
void add();
float sum(float x ,float y);
}
实现接口
1.类实现接口:使用 implements
声明该类实现接口,如:
class A implements Printable,Addable;
2.重写接口中的方法:要非抽象类实现某个接口,那么此类必须重写接口中的所有方法。其中要去掉abstract
修饰符、给出方法体,且方法的访问权限要明显的用public
来修饰。
若是一个类实现一个接口,但没有重写接口中的所有方法,则此类必须是抽象类。如:
interface Computable{
final int MAX = 100;
void speak(String s);
int f(int x);
float g(float x, float y);
}
Abstract class A implements Computable{
public int f(int x) {
int sum = 0;
for(int i=1;i<=x;i++){
sum = sum +I;
}
return sum;
}
}
3.如果一个接口不加public
修饰,就称作友好接口,可以被与该接口在同一包中的类实现。
若父类实现了某个接口,那么子类就自然实现了该接口,不必再声明。
import
语句可以引入包中的接口,如 import java.io.*;
接口回调
接口回调指的是:可以把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法。(为之后复习此重点概念,下为引用书上示例程序)
interface ShowMessage {
void 显示商标(String s);
}
class TV implements ShowMessage {
public void 显示商标(String s) {
System.out.println(s);
}
}
class PC implements ShowMessage {
public void 显示商标(String s) {
System.out.println(s);
}
}
public class Example6_2 {
public static void main(String args[]) {
ShowMessage sm; //声明接口变量
sm=new TV(); //接口变量中存放对象的引用
sm.显示商标("长城牌电视机"); //接口回调。
sm=new PC(); //接口变量中存放对象的引用
sm.显示商标("联想奔月5008PC机"); //接口回调
}
}
理解接口
- 接口可以抽象出重要的行为标准,该行为标准用抽象方法来表示。
- 可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法,即体现该类根据接口里的行为标准给出的具体行为。
- 核心思想就在于它可以要求某些类有相同名称的方法,但方法的具体内容(方法体的内容)可以不同。
接口与多态
接口产生的多态是指不同的类在实现同一个接口时可能具有不同的实现方式,那么接口变量在回调接口方式时就可能具有多种形态。
接口参数
如果一个方法的参数是接口类型,我们就可以将任何实现该接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。
教材学习中的问题和解决过程
-
问题1:因为接口体只有抽象方法而没有普通方法,那么不禁思考接口体中是否可以自己定义构造方法?
-
问题1解决方案:此问题是在学习教材6.2时提出,在学到后边的范例程序自我意识到, 接口体在使用上 并不同普通的类需要构造方法,而是使用
implements
指令在类的声明时使用。 -
问题2:在P153的Example6_4中,为算开方运算,有一段代码是:
Math.sqrt(a*b);
,然而整个程序的代码中没有引入过Math类或是带Math的包。 -
问题2解决方案:经过上网查找发现,
java.lang.Math
包是建立java工程时自动导入的。 -
问题3:在P153的Example6_4中,最后的输出函数一概往日的
println
而使用了printf
,虽不会有编译运行上的错误,但因不换行导致如下图很不美观,不知为何??
-
问题3解决方案:并没有得到什么硬核解答,因此问题对编程影响不大,故猜测此程序为另一位具有不同爱好的编者所写。
代码调试中的问题和解决过程
- 问题1:教材P160中的编程题,在编写程序编译时出现下图错误而不理解。
- 问题1解决方案:接口参数章节没有完全理解,此题中参数应填new Dog()和new Cat ,表示符合之前定义的数据类型的一个新对象。
代码托管
- 在此说明:因本地仓库不知为何损坏,因此重新克隆了一个仓库,因而本周代码量与总代码量相同
上周考试错题总结
- 无
结对及互评
评分标准
-
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
-
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
-
教材学习中的问题和解决过程, 一个问题加1分
-
代码调试中的问题和解决过程, 一个问题加1分
-
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
-
其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
-
扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
- 迟交作业的扣至0分
点评模板:
-
博客中值得学习的或问题:
- 在使用markdown语句时可以多使用“代码格式”以方便查阅浏览
- 教材学习内容比较精炼,有自己的思考
-
代码中值得学习的或问题:
- 无
-
基于评分标准,我给本博客打分:5分。得分情况如下:
1.正确使用Markdown语法(加1分):
2.模板中的要素齐全(加1分)
3.代码调试中的问题和解决过程, 一个问题加1分
4.本周有效代码超过300分行的(加2分)
点评过的同学博客和代码
-
本周结对学习情况
-
结对学习内容
-
第六章代码学习、调试
-
四则运算器的构想
-
-
上周博客互评情况(只要链接,具体点评放相应博客下)
其他(感悟、思考等,可选)
1.接口作为一种用来提前声明的特殊的类,由于简洁直观,可以广泛使用。
2.第一次java实验练习让我意识到写一个符合功能需求的程序是一个比较复杂的过程,现在的基础知识一定要扎实牢靠地进行学习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 6/6 | 1/1 | 20/20 | |
第二周 | 245/251 | 1/2 | 18/38 | |
第三周 | 633/884 | 3/7 | 22/60 | |
第四周 | 305/1189 | 1/4 | 30/90 | |
第五周 | 410/1599 | 3/7 | 30/120 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)