学号 20175206《Java程序设计》第五周学习总结
教材学习内容总结
6.1 接口
为了克服Java单继承的缺点,Java使用了接口,一个类可以实现多个接口。
使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体。
(1)接口声明
接口通过使用关键字interface来声明
格式:interface 接口的名字
(2)接口体
接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不许提供方法的实现,所以,方法的定义没有方法体,且用分号“;”结尾
(3)接口的变量和方法的构成规则
接口中的变量自动都是public、static,final,
接口中的方法默认为public abstract;接口也产生class文件。
接口中的方法不能被static和final修饰,因为要重写所有接口中的方法。
接口中没有构造函数,方法可以抛出异常。
6.2 实现接口
一个类通过使用关键字implements声明自己实现一个或多个接口。
如果一个类实现了某个接口,那么这个类必须重写该接口的所有方法。
接口可以通过继承产生新的接口。
Java提供的接口都在相应的包中,通过import语句不仅可以引入包中的类,也可以引入包中的接口.
6.3 接口的UML图
表示接口的UML图和表示类的UML图类似,使用一个长方形描述一个接口的主要构成,将长方形垂直地分为三层。
顶部第1层是名字层,接口的名字必须是斜体字形,而且需要用<>修饰名字,并且该修饰和名字分列在两行。
第2层是常量层,列出接口中的常量及类型,格式是“常量名字:类型”。
第3层是方法层,也称操作层,列出接口中的方法及返回类型,格式是“方法名字(参数列表):类型”。
6.4 接口回调
接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类重写的接口方法。实际上,当接口变量调用被类重写的接口方法时,就是通知相应的对象调用这个方法
6.5 理解接口
理解的关键点是:
(1)接口可以抽象出重要的行为标准,该行为标准用抽象方法来表示。
(2)可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法,即体现该类根据接口里的行为标准给出的具体行为。
接口的思想在于它可以要求某些类有相同名称的方法,但方法的具体内容(方法体的内容)可以不同,即要求这些类实现接口,以保证这些类一定有接口中所声明的方法(即所谓的方法绑定)。接口在要求一些类有相同名称的方法的同时,并不强迫这些类具有相同的父类。
6.6 接口与多态
可以通过在接口中声明若干个abstract方法,表明这些方法的重要性,方法体的内容细节由实现接口的类去完成。使用接口进行程序设计的核心思想是使用接口回调,即接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法。
6.7 接口参数
如果一个方法的参数是接口类型,我们就可以将任何实现该接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。
6.8 abstract类与接口的比较
接口和abstract类的比较如下:
(1)abstract类和接口都可以有abstract方法。
(2)接口中只可以有常量,不能有变量;而abstract类中即可以有常量也可以有变量。
(3)abstract类中也可以有非abstract方法,接口不可以。
6.9 面向接口编程
面向接口去设计程序,可以通过在接口中声明若干个abstract方法,表明这些方法的重要性,方法体的内容细节由实现接口的类去完成。
使用接口进行程序设计的核心思想是使用接口回调,即接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法。
教材学习中的问题和解决过程
- 问题1:接口无法调用类中其他的接口方法?接口的回调如何处理
- 问题1解决方案:
- 问题2:如何要求程序实现的接口数
- 问题2解决方案:
-
...
[代码托管]
码云学习项目链接(https://gitee.com/ldc792975996/20175206_li_dechen/tree/master/%E7%AC%AC%E4%BA%94%E5%91%A8%E4%BB%A3%E7%A0%81/src)
脚本的运行结果截图
上周考试错题总结
- 错题1
如果有以下程序片段:
interface Some{
protected void dosome ();
}
class SomeImpl implements Some {
public void dosome(){
System.out.println("做一些事");
}
}
public class Main{
public static void main (String [] args) {
Some s= new SomeImpl();
s.dosome ();
}
}
以下描述正确的是(A)
A .编译失败
B .显示“做一些事”
C .发生ClassCastException
D .执行时不显示任何信息
原因:需要看到public类和protected的区别。
- 错题2
如果有以下程序片段
interface Some{
void dosome ();
}
class SomeImpl implements Some {
public void dosome(){
System.out.println("做一些事");
}
}
public class Main {
public static void main (String [] args) {
Some s= new SomeImpl();
s.dosome ();
}
}
以下描述正确的是(B)
A .编译失败
B .显示“做一些事”
C .发生ClassCastException
D .执行时不显示任何信息
原因:与第一道题进行比较得出结果。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 8篇 | 100小时 | |
第五周 | 350/500 | 2/2 | 15/20 | |
第六周 | 0/500 | 0/2 | 0/30 | |
第七周 | 0/1000 | 0/2 | 0/25 | |
第八周 | 0/1500 | 0/2 | 0/25 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:20小时
实际学习时间:15小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)