在本章的开始,我首先学习了接口,接口是用来设计ADT的一个方法,在接口中,我们设计各类方法和规约,这样将一个类的规约条件和他的实现分隔开,用户只能了解到规约,参数类型和返回值类型,而不能看到实现类的方法,所以这样的设计遵守了表示独立性,这样也方便了维护人员该ADT的规约,因为省去了实验代码,更加容易查找。
在学习接口的过程中,我还发现了其中的一个规律,那就是在接口中没有构造器,也无法保证所有实现类中都包含了同样名字的构造器。
之后学习了继承,继承关系是通过 extends 关键字产生的,如果我们要设计的多个类中存在相同属性和方法,那我们在设计中可以将这些内容抽取到单独一个类中,让另外的类继承这个父类,就无需再定义这些属性和行为。这方便了我们的设计。子类可以直接访问父类中的非私有的属性和行为,也就是无法继承父类中私有的内容,我们要了解到这一点。这提高了我们在编写代码时的复用性,缩短了编程时间,减小了任务量,而且让我们的工作更加有条理。
在继承中,java语言只支持继承一个父类的情况,不允许多重继承,但是多个类可以继承一个父类,此外继承还被分为两种:普通继承和严格继承,在严格继承中子类只能方法,无法重写方法。实现严格继承,与需要在每个方法前用final修饰即可,这样就禁止了重写。
之后,又学习了重写的含义,重写的方法和之前的的参数类型,方法名,返回值类型都相同,对于限制条件,只能更加宽松,不能更加严格,可视性可以扩大,但不能缩小。紧接着又学习了重载,重载的参数列表必须和之前的不同,可以改变返回值的类型,也可以改变可视性,也可以改变异常的情况,即可以改变规约情况,在这,我自己对重写和重载进行了对比,对于参数表,重写的方法不能进行改变,而重载必须改变,对于返回值类型,重写也不能改变,重载则可以改变也可以不变。对于规约限制,重写可以不变或者变的更加宽松,重载可以随意改变,决定调用重写方法还是父类方法是在运行时,对象的类型决定的,而重载中,在编译时参数类型就进行了匹配,在编译时就决定了运行哪一个函数。
最后学习了泛型,这是一个重要的多态类型,他可以让我们在类或方法中预支地使用未知的类型。当编译时,泛型类型信息被删除,所以不能使用instanceof()检查泛型类型。