多态

来源:互联网 发布:活动报名系统源码 编辑:程序博客网 时间:2024/06/10 00:49

多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。

子类继承父类,如果是名称相同,参数不同(重载)

子类继承父类,如果是名称相同,参数也相同(覆盖,也称方法重写)

方法覆盖出现的前提条件之一是必须有继承发生的情况下,而且要求父类和子类只能够的方法必须同原型

方法重载时,继承不是必须的,它只要求方法名称相同,而参数列表必须不同

父类的引用可以指向子类的对象

子类的引用不能指向父类的对象

父类的引用指向哪个类的实例,就可以调用哪个类的方法

同样使用父类的引用,调用同一个名称的方法,却可以得到不同的调用结果,这就是java中的多态,即:

同一函数,多种形态

静态多态:

也称编译时多态,即在编译时决定调用哪个方法;

静态多态一般是指方法重载;

只要构成了方法重载,就可以认为形成了静态多态的条件;

静态多态与是否发生继承没有必然联系

动态多态:

也称为运行时多态,即在运行时才能确定调用哪个方法;

必须要有继承的情况存在;

必须要有方法覆盖;

必须由父类的引用指向子类的实例,并且通过父类的引用调用被覆盖的方法;

继承是实现动态多态的首要前提


多态便于灵活地拓展我们开发的程序


抽象类不可以直接实例化,只可以用来继承;

抽象类中也可以包含有非抽象的方法;

构造方法和静态方法不可以修饰为abstract


接口中不能定义非抽象方法;

接口中的所有方法都默认为抽象方法,无需在每个方法前加abstract;

接口的实现类应该提供对接口中所有抽象方法的具体实现,否则将成为抽象类;

与抽象类和它的继承类相似,也可以使用接口的引用指向其实现类的对象,从而达到动态多态的效果


final修饰变量,变量成为常量,常量在声明时必须初始化;

final修饰方法,方法不能被子类覆盖;

final修饰类,该类不能被继承

0 0
原创粉丝点击