一.类
类方法调用:1.static,通过类的名字后面加上点;2.通过对象调用,要先生成对象
二.接口
标准接口:接口中只有方法的定义没有实现。
接口中只有对于方法的定义,没有关于方法得具体实现,但是在新一点的java版本中,接口内部存在一些实现(java8开始允许接口中存在静态方法,而java也可以通过缺省在接口中同一实现某些功能)。
接口之间可以继承与扩展,一个类可以实现多个接口,一个接口可以有多种类(由于java不支持多继承,所以作为补偿,java支持多实现)
接口的缺点:其中的很多方法会在所有类中实现,导致重复实现。
不同方法类型的作用域:在需要保证信息隐藏时,尽量使用private,可以的话加上final
三.抽象类
介于普通类和标准接口之间,与一些接口类似,有些方法只有定义没有实现。
有些方法没有实现,导致了抽象类不能实例化,不能用new产生对象,继承某个抽象类的子类在实例化时,所有父类中的抽象方法必须已经实现。
继承与重写
一.继承
非严格继承:子类父类中的方法存在不同实现。
严格继承:子类中只能添加新方法,无法重写父类中的方法。
(哪个方法不想背被重写,方法签名中加入final,哪个类不想被重写,类的签名中加入final)
二.重写:
重写父类的方法时,子类方法的签名要与其保持一致。
父类的大部分方法应该可以被大多数子类直接使用(即对于子类来说通用的方法,直接放在父类中),但是有些子类存在自己的特殊要求,需要重写,而在父类中,如果一个方法为空,则对于所有子类都要对他进行重写。
重写后还想调用父类的方法:super.方法名()。
在构造函数中调用父类构造函数:super(方法名)。
重写时,不建议改变原方法的本意。
在重写的方法前加上@Override,编译器会检查覆盖方法和被覆盖的方法签名是否完全一致,所以在某些情况下,删除@Override可以使一些语句通过静态检查
多态,子类型,重载
一.多态
参数化多态,一个类型的名字可以代表多个类型(泛型编程),如lab2中的graph中涉及到的数据类型L。
子类型多态,包含多态,一个变量名字可以代表多个类的实例。
二.重载
方法重载:一个方法有多个同名的实现(参数列表一定不一样,因为编译器并不能在名字一样的情况下靠逻辑判断出到底是调用哪个方法,只能在编译时靠参数的不同确认调用哪个方法)
参数的不同主要是指参数数据类型的不同,不是参数具体数据名字的不同
一些重点总结:父类型不能调用子类型的方法,父子类型有同样的方法,重写方法,接口不能实例化,不能new,子类型的返回值只能是父类型返回值的子类型
三.泛型
参数多态性是指方法针对多种类型时具有同样的行为,此时可用统一的类型变量表达多种类型。
类中如果声明了一个或多个泛型变量,则为泛型类。