关于多态要理解的基础知识:
继承:子类继承父类使用关键字extends,子类继承父类之后就可以使用父类的所有方法和属性(除了private修饰的)。但构造函数是个特例,如果一个类没有任何构造函数,编译器会自动为该类生成一个默认的无参构造函数,如果这个类有构造函数,构造器就不再为其生成默认无参构造函数。子类的构造函数在实例化对象的时候会调用父类的无参构造函数,但父类的有参构造函数必须用关键字super调用,所以在写一个类的时候最好给类写一个无参构造函数,以免子类在实例化的时候不必要的错误。
接口:Java语言不支持一个类有多个直接的父类,但有些时候确实需要实现多继承,这时可以实现(implements)多个接口,间接的实现多继承。当一个类继承了接口之后就必须要实现该接口的所有方法。实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔。
抽象类:含有抽象方法的类就是抽象类,Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个 新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行。
重载:多个同名函数同时存在一个类中,但是各个方法具有不同的参数个数/类型。这里要注意,没有对返回值有限制,也就是说返回值可以相同也可以不同,但是不管返回值如何,要想重载,参数个数/类型必须和被重载方法不同,仅仅返回值不同是不能构成重载的。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。
重写:子类对父类的方法重新定义,子类中定义某方法与其父类有相同的名称和参数,并且返回值也必须相同,只有方法体内部内容可以自己修改。另外子类函数的访问修饰权限不能少于父类的。
父类引用指向子类对象:此时要知道向上转型,就是说父类其实是一个较为抽象的类,然而子类相较于父类要更为具体,属性更多,方法更丰富,此时父类引用指向子类对象时,只能使用父类中具有的方法,而子类中特有的方法,父类引用是无法调用的。但是如果子类重写了父类的某个方法,在调用此方法的时候,会调用子类重写的方法,而不是父类的方法。这就是动态绑定(在代码执行期间虚拟机用调用实际对象类型对应的方法)。使用父类对象指向子类对象,既可以使用子类对象的强大功能,又可以提取父类的共性,在现实应用中十分广泛。
接口类型引用指向实现类对象:同“父类引用指向子类对象”一样理解。
参考的相关文章:接口与抽象类