重载、覆写和多态

重载(Overload)、覆写(Override)看起来很像。
重载:一个类内部定义了名字相同、参数不同的多个函数,一般情况下返回值也相同。
覆写:子类定义了一个父类中已有的函数,且名字、参数、返回值都要完全相同。

重载其实缺少“必要性”,名字相同或者不同,并不影响使用,重载的各个函数就是不同的作用。
覆写的作用是为了实现多态,覆写和多态两个概念是绑定的。

多态:针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。父类的引用,可以指向父类的实例,也可以指向子类的实例,实际执行的是父类还是子类的方法,以实例为准。

抽象类和接口

抽象方法只有定义,没有实现。只要有一个抽象方法,那么这个类就必须定义为抽象类。接口比抽象类更抽象,连字段都不能有(可以有静态字段),只有方法(全部是抽象方法)。比较如下:

接口的方法全部是抽象方法,由实现类来实现,因此只能是public abstract类型(代码中可以省略书写这几个关键字)。

接口可以有default方法。其目的是:当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的方法用default修饰,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。

接口的静态字段有点鸡肋,只能是public static final类型(因此代码中可以省略书写这几个关键字),基本上相当于定义了一个不可修改的常量。
我觉得这些限制可能有如下原因:
1、接口本身只有抽象方法,连get/set都无法实现;如果是private字段则子类也不能访问,就没有意义了。
2、接口可以有很多实现类,如果各个实现类都去更改这个静态字段,容易混乱;所以要求为final类型、不允许修改。


BENCJL
15 声望0 粉丝

问天问大地