重载(Overloading):重载是一个类多态性的重要表现。对于同一个类,如果这个类里面有两个或者多个重名的方法(比如类中的构造方法),但是方法的参数个数、类型、顺序至少有一个不一样,这时候局构成方法重载。不能以返回值区分重载方法,而只能以“参数类型”来区分。
重写(Overriding):重写是体现父类与子类的间的多态性。当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。重写也是覆盖 override
当子类重写了父类的函数,那么子类的对象如果调用该函数,一定调用的是重写过后的函数。可以通过super关键字进行父类的重写函数的调用。
抽象类和接口:
相同点:
两者都是抽象类,都不能实例化对象。
interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。
不同点:
1、一个类只能继承一个抽象类,可以实现的多个接口。interface需要实现,要用implements,而abstract class需要继承,要用extends。
2、接口是一种约定,强调特定功能的实现,而abstract class强调所属关系。
3、尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现:
这个选择有两点含义:
Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。
abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。