这两节主要讲了Java的一些知识以及与软件设计的一些要点。
首先是接口,Java的成员有静态成员和示例成员,静态成员是所有类共享的,而示例成员是每个对象单独所有的,所以静态成员才能用于接口。接口是一种只有方法名和规约的类,无属性和具体的实现。对于接口来说,接口是无法实例化的,而且接口可以直接给用户,便于用户使用。
一般来说,创建变量也有两种,一种是用具体的类型创建,另外一种是用接口创建,即没有具体实现,我们倾向于用接口来定义变量。因为接口中无构造函数,也没有实现形式,所以接口是无法限制返回的类型的。而且需要注意的是immutable类型的接口是不能有mutator变值器的。但是静态方法可以存在于接口中。
然后是继承和重写。一般来说,我们倾向于严格继承,也就是子类中所有的方法都应该被包含在父类中,否则父类会无法调用子类中的操作。在继承的时候,final的类和属性是无法被继承的。如果方法被多个子类调用,那么我们可以将方法写在父类中,方便调用,反之就放在子类中即可。
如果子类中要调用父类的方法,那么我们可以用super来调用,但是super要放在第一句,即先创建了父类才能创建子类。
然后是重写,重写不能改变父类的本意,而且重写的时候,子类要比父类更加具体,而且子类的规约要比父类中的规约更强,也就是更弱的前置条件和更强的后置条件。
然后是抽象类,也就是具有抽象方法,即只有声明而没有具体实现的方法,的类。就像接口就是完全的抽象类。
接着是多态,多态是指一个类在不同的时期表现不同,多态有多个实现方法:
1.重载,即多个方法共用一个方法名,使用方法的参数类型和数量来区分。
2.参数化多态,也就是泛型,即实现的时候不定义对象的具体类型。
3.子类型多态,或者叫包含多态们也就是用父类来声明,子类来实现。
重载是指多个方法共用一个方法名,这些方法的参数列表一定有区别,但是其余的像返回值,public还是private,抛出的异常,都可以一样。
重载是一种静态多态,也就是Java在编译阶段来根据参数列表进行匹配的,如果出错,那么在编译阶段就会报错。
重载需要和重写区分,重写是指参数列表和返回值均相同的方法。
第二是参数型多态,也就是泛型,需要注意的是Java中无法定义泛型数组。但是我们可以用泛型来继承泛型。
第三是子类型多态,若b继承了a,那么b就称为a的子类型。需要保证的是子类型的规约一定要比父类型强或者相同。
然后是object的三个基本的函数,equals(),hashCode(),toString(),前两个是用例比较的,最后一个是将对象转成字符串的。
然后是immutable类的一些知识,immutable类的好处有很多,就像安全,编程简便。在设计immutable类的时候,我们应该做到以下几点:
1.final所有属性
2.private所有属性
3.不存在mutator
4.不能返回属性的引用
5.确保防止了方法被重写。
在返回属性的时候,我们可以重新创建一个新的副本或者对象,这样可以有效防止属性被修改。
然后是调用方法的决定,类型决定了方法是否被调用,而运行时候决定方法调用的是父类还是子类型。我们可以用instanceof和getclass来获取对象运行时候的实际类型,但是编程中不建议使用,除非迫不得已。
总结第四节主要讲的就是方法的调用,多态,重写和继承以及使用immutable类的好处。