标签:不同的 父类 不难 false pre 封装 需要 类对象 http
众所周知,Java有三大特性,封装,继承,多态,封装解决了数据的安全性问题,封装解决了代码的重用问题,多态解决了程序的扩展问题,今天我们就来剖析java基础核心机制之多态,了解什么是多态,以及多态的类别以及构成动态多态的条件.一、什么是方法覆盖及方法覆盖override与方法重载(overload)的区别override
概念:又叫方法重写,在子类中有和父类同原型的方法(方法原型:返回值类型+方法名字+形参列表)时,
创建子类对象并调用该方法,会覆盖父类的同原型方法,
执行子类的方法,表现子类特征
原则:
1.必须是在继承的关系下才能产生方法覆盖
2.子类的方法原型(包括:返回值类型、方法名、参数)与父类保持一致
3.子类方法的访问权限不得低于父类的访问权限
4.子类方法抛出的异常不得低于父类方法抛出的异常
方法重载和方法重写区别:
方法重载(Overload) 方法重写(Override)
是否需要继承: 无关 必须继承
返回值类型: 无关 必须相同
方法名: 必须相同 必须相同
形参列表: 必须不同 必须相同
二、什么是引用转型
向上转型:父类的引用指向子类的实例(安全)
Person p = new Student();
向下转型:不安全
Student s = (Student)new Person();
使用instanceof运算符判断 前一个对象是否是后面的类或者其子类,如果是返回true否则返回false
语法:
if(对象名instanceof类名){
}
三、什么是多态
概念:多种形态(实现多种功能) 方法实现功能
即:同一函数(方法),不同形态(继承、方法重写、父类的引用指向子类的实例)
通俗:父类的引用指向哪个子类的实例,就调用哪个类中的重写方法。
得到不同的结果,即同一种方法,多种形态,这就是多态
两种类型:
1、静态多态(编译时多态):
程序在编译时就知道调用哪个方法
方法重载
2、动态多态(运行时多态):
程序在运行时才知道调用哪个方法
方法重写
产生动态多态的条件:
a.有继承
b.有方法重写
c.父类的引用指向子类的实例
本质:多态的本质就是将子类对象赋值给父类变量,在运行时期会表现出具体的子类特征(调用子类的重写方法)。
例如:
我家里养了一只动物,叫乖乖..
乖乖是狗 发了了汪汪的叫声
是猫 发了喵喵..
标签:不同的 父类 不难 false pre 封装 需要 类对象 http
原文地址:https://blog.51cto.com/14814821/2502004