多态性:
方法的重载和覆写
方法的覆写:子类定义了与父类中同名的方法,覆写方法时需要考虑权限,即被子类覆写的方法不能拥有比父类更严格的访问权限。
方法的覆写一般是当父类的某个方法不适合于子类本身的特征行为时就当覆写父类中应当改变的方法。
方法覆写时应遵循的原则:
方法的签名必须相同(方法的签名指方法名和方法的参数列表,方法的参数列表包括方法的参数类型,参数个数,参数顺序)
子类方法的返回值类型比父类方法的返回值类型级别更小或者相等
子类方法声明抛出的异常比父类方法声明抛出的异常级别更小
子类方法的访问权限比父类方法的访问权限级别更大
怎样判断方法是否覆写了:
判断子类方法是否覆写父类方法,可以在子类方法前加上@Override,如果编译能通过,表明是方法覆写。
方法的重载:
在同一个类中,允许存在一个以上的同名方法,只要方法的参数个数或者参数类型,或者参数顺序不同,即是方法的重载。方法的重载与方法的返回值类型无关
方法重载应遵循的原则
在同一个类中
方法名相同
方法的参数列表不同(方法的参数列表包括方法的参数类型,参数个数,参数顺序)
对象的多态行:编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象决定,如果编译时类型和运行时类型不同,就出现多态。
实现多态的机制:
父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
多态的作用:
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。只修改方法的实现,不必修改方法的声明,继承是多态产生的前提条件。
分类:
编译时多态:方法重载
运行时多态:方法覆写
多态时的方法调用:
当一个引用类型的变量若声明为父类的类型,但实际上引用的是子类的对象(多态情况):此时该变量不能再访问子类中自己特有的字段和方法;若子类覆写了父类的方法,那么此时通过变量访问到的方法,实际上是子类的方法; |