201871010111-刘佳华《面向对象程序设计(java)》第八周学习总结
实验七 接口的定义与使用
实验时间 2019-10-18
第一部分:知识总结
接口的概念:
①java为了克服单继承的缺点而引入接口。
②接口不是类,而是对类的一组需求描述,这类要遵从从接口描述的统一格式进行定义。
③一个类可以实现(implement)一个或多个接口,并在需要接口的地方,随时实现相应的接口对象。
声明:接口体中包含常量定义和方法定义,接口中只进行方法的声明,不提供方法的实现。
说明:
1)通常接口的名字以-able或-ible结尾;
2)可以使用extends来继承接口的常量和抽象方法,扩展形成新的接口;
3)接口中的所有常量必须是public static final,方法必须是public abstract,这是系统默认的,不管你在定义接口时,写不写修饰符都是一样的。
接口的实现:在类声明时使用implement关键字实现一个或多个接口(用逗号隔开),且一个类若使用了某个接口,那么这个类必须实现该个接口的所有方法,即提供方法体。
说明:
(1)若实现接口的类不是抽象类,则必须实现所有接口的所有方法,即为所有的抽象方法定义方法体。
(2)一个类在实现某接口抽象方法时,必须使用完全相同的方法名、参数列表和返回值类型。
(3)接口抽象方法的访问控制符已指定为public,所以类在实现时,必须显式地使用public修饰符,否则被警告缩小了接口中定义的方法的访问控制范围。
接口的使用:
接口不能构造接口对象,但可以声明接口变量以指向一个实现了该接口的类对象。
接口与抽象类:
接口与抽象类的区别:
(1)接口不能实现任何方法,而抽象类可以。
(2)类可以实现许多接口,但只有一个父类。
(3)接口不是类分级结构的一部分,无任何联系的类可以实现相同的接口。
掌握CompareTo接口和Comparator接口使用方法
回调的定义与用法
对象克隆:
*Object类的Clone方法
*浅层拷贝与深层拷贝
浅层拷贝:被拷贝对象的所有常量成员和基本类型属性都有与原来对象相同的拷贝值,而若成员域是一个对象,则被拷贝对象该对象域的对象引用仍然指向原来的对象。
深层拷贝:被拷贝对象的所有成员域都含有与原来对象相同的值,且对象域将指向被复制过的新对象,而不是原有对象被引用的对象。换言之,深层拷贝将拷贝对象内引用的对象也拷贝一遍。
*Java中对象克隆的实现
Lambda表达式:
这是一种表示可以在将来某个时间点执行代码块的简洁方法。
Lambda表达式的语法基本结构
(arguments) -> body有如下几种情况:
●参数类型可推导时,不需要指定类型,如
(a) -> System.out.printin(a)
●只有一个参数且类型可推导时,不强制写(,如
a一> System.out.printn(a)
, 参数指定类型时,必须有括号,如(int a) -> System.out.printin(a)●参数可以为空,如() > System.out.printn("hello"), body需要用{}包含语句,当只有一 条语句时{}可省略
内部类:
●内部类可以直接访问外部类的成员保括private成员,但是内部类的成员却不能被外部类直接访问。
●在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时, 如果在该方法和内部类中都未定义过这个变里,内部类中对变里的引用会被传递给外部类对象的引用。
局部内部类
●内部类并非只能在类内定义,也可以在程序块内定义局部内部类。例如,在方法中,甚至在for循环体内部。
●局部内部类不能用publi c或pr ivate访问修饰符进行声明,它的作用域被限定在声明这个局部类的块中。
匿名内部类
●若只创建类的一个对象,则不必为该类命名,这种类称为匿名内部类。
●由于匿名类没有类名,所以匿名类不能有构造器,取而代之的是将构造器参数传递给超类的构造器。若匿名内部类实现接口时,则匿名内部类不能有任何构造参数。
●如果构造参数的闭圆括号跟一个开花括号,表明正在定义的就是匿名内部类
第二部分:实验部分
1、实验目的与要求
(1) 掌握接口定义方法;
(2) 掌握实现接口类的定义要求;
(3) 掌握实现了接口类的使用要求;
(4) 掌握程序回调设计模式;
(5) 掌握Comparator接口用法;
(6) 掌握对象浅层拷贝与深层拷贝方法;
(7) 掌握Lambda表达式语法;
(8) 了解内部类的用途及语法要求。
2、实验内容和步骤
实验1: 导入第6章示例程序,测试程序并进行代码注释。
测试程序1:
l 编辑、编译、调试运行阅读教材214页-215页程序6-1、6-2,理解程序并分析程序运行结果;
l 在程序中相关代码处添加新知识的注释。
l 掌握接口的实现用法;
l 掌握内置接口Compareable的用法。
package interfaces; import java.util.*; /** * This program demonstrates the use of the Comparable interface. * @version 1.30 2004-02-27 * @author Cay Horstmann */ public class EmployeeSortTest { public static void main(String[] args) { var staff = new Employee[3]; staff[0] = new Employee("Harry Hacker", 35000); staff[1] = new Employee("Carl Cracker", 75000); staff[2] = new Employee("Tony Tester", 38000); Arrays.sort(staff);//实现按姓名字符串长度排序操作 // print out information about all Employee objects for (Employee e : staff) System.out.println("name=" + e.getName() + ",salary=" + e.getSalary());//遍历输出 } }