##课程简介 ###多态 多种形态,是面向对象语言最核心特征,封装和继承都是为多态准备的,非常重要 ###多态的含义 意味着允许不同类的对象对同一消息做出不同的响应。 ###多态的分类: 1.编译时多态:设计时多态,方法重载来实现 2.运行时多态:程序运行时来决定调用哪个方法 ###多态的条件: 1.满足继承关系 2.父类引用指向子类对象。 ###向上转型 父类引用指向子类实例,默认的把子类的实例转为父类的实例了 如:Animal one=new Dog(); 能够调用父类的重写方法和派生的方法,不能调用子类特有的方法  ###向下转型 向上向下转型总结:前提是父类引用指向子类实例对象,父类指向父类,子类指向父类都会报错 向下转型:把指向子类对象的父类的引用付给了子类叫向下 ```java Animal one=new Dog();//向上引用 Dog a=(Dog)one;//向下引用 ```  ###instanceof运算符 instanceof运算符判断是否能够对象转化,提高向下转型的安全性 if(two instanceof Cat){} if(two instanceof Animal){} if(two instanceof object){} 核对是否能够 向下转 子类转 父类转object类都可以  ###总结 向下转型(强制类型转换): 1.子类引用指向父类对象,此处必须进行强转 2.必须满足转型条件才能转换。 3.instanceof 判断左边的对象是否是右面的实例 4.父类引用指向子类实例,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有方法。 5.父类中的静态方法无法被子类重写,所以向上转型之后。只能调用到父类原有的静态方法。  ###类型转换案例(上) 方案1:编写方法,传入不同类型的动物,调用格子的方法 优点:看起来非常清晰 缺点:增加多个需求的话就要写很多重载方法 方案2:编写方法传入动物的父类,方法中通过类型转换调用指定子类的方法(新增需求不多的时候推荐使用) 优点:一个方法解决各种问题 缺点:后期维护的时候,如需新增需求,要在方法体内部破坏原有封装,新增功能  ###类型转换案例(下) 多态的操作: 当我们在实际开发中需要同一个操作行为,针对不同的参数,返回不同的实例对象,完成不同操作结果时,适用于多态的操作。 能够更好的体现类型转换的价值  ###抽象类 abstract: 抽象类。不能实例化,但可通过向上转型指向子类实例。 应用:父类只知道子类应该具有的特性,但实际应用中没有实例化父类的必要,而是通过子类的实例化来实现具体的功能。 优点:限制子类的设计随意性;同时避免无意义的父类实例化。  ###抽象方法 abstract+类:抽象类 abstract+方法:抽象方法 1.抽象类限制父类实例化,只能被继承,通过子类向上转型实例化。 2.抽象方法不允许包含方法体,子类必须重写父类的抽象方法。若不重写,则子类也必须变为抽象类。 3.抽象类、抽象方法应用价值:限制子类必须具有某种能力,提醒子类要实现自己的特定方法。 4.包含抽象方法的类一定是抽象类,但是抽象类中可以没有抽象方法 5.static、final、private不能与abstract同时出现。抽象方法要在子类中被重写,而private只在当前类被访问,final、static方法不能被子类重写,所以不能与abstract并存。  Loading... ##课程简介 ###多态 多种形态,是面向对象语言最核心特征,封装和继承都是为多态准备的,非常重要 ###多态的含义 意味着允许不同类的对象对同一消息做出不同的响应。 ###多态的分类: 1.编译时多态:设计时多态,方法重载来实现 2.运行时多态:程序运行时来决定调用哪个方法 ###多态的条件: 1.满足继承关系 2.父类引用指向子类对象。 ###向上转型 父类引用指向子类实例,默认的把子类的实例转为父类的实例了 如:Animal one=new Dog(); 能够调用父类的重写方法和派生的方法,不能调用子类特有的方法  ###向下转型 向上向下转型总结:前提是父类引用指向子类实例对象,父类指向父类,子类指向父类都会报错 向下转型:把指向子类对象的父类的引用付给了子类叫向下 ```java Animal one=new Dog();//向上引用 Dog a=(Dog)one;//向下引用 ```  ###instanceof运算符 instanceof运算符判断是否能够对象转化,提高向下转型的安全性 if(two instanceof Cat){} if(two instanceof Animal){} if(two instanceof object){} 核对是否能够 向下转 子类转 父类转object类都可以  ###总结 向下转型(强制类型转换): 1.子类引用指向父类对象,此处必须进行强转 2.必须满足转型条件才能转换。 3.instanceof 判断左边的对象是否是右面的实例 4.父类引用指向子类实例,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有方法。 5.父类中的静态方法无法被子类重写,所以向上转型之后。只能调用到父类原有的静态方法。  ###类型转换案例(上) 方案1:编写方法,传入不同类型的动物,调用格子的方法 优点:看起来非常清晰 缺点:增加多个需求的话就要写很多重载方法 方案2:编写方法传入动物的父类,方法中通过类型转换调用指定子类的方法(新增需求不多的时候推荐使用) 优点:一个方法解决各种问题 缺点:后期维护的时候,如需新增需求,要在方法体内部破坏原有封装,新增功能  ###类型转换案例(下) 多态的操作: 当我们在实际开发中需要同一个操作行为,针对不同的参数,返回不同的实例对象,完成不同操作结果时,适用于多态的操作。 能够更好的体现类型转换的价值  ###抽象类 abstract: 抽象类。不能实例化,但可通过向上转型指向子类实例。 应用:父类只知道子类应该具有的特性,但实际应用中没有实例化父类的必要,而是通过子类的实例化来实现具体的功能。 优点:限制子类的设计随意性;同时避免无意义的父类实例化。  ###抽象方法 abstract+类:抽象类 abstract+方法:抽象方法 1.抽象类限制父类实例化,只能被继承,通过子类向上转型实例化。 2.抽象方法不允许包含方法体,子类必须重写父类的抽象方法。若不重写,则子类也必须变为抽象类。 3.抽象类、抽象方法应用价值:限制子类必须具有某种能力,提醒子类要实现自己的特定方法。 4.包含抽象方法的类一定是抽象类,但是抽象类中可以没有抽象方法 5.static、final、private不能与abstract同时出现。抽象方法要在子类中被重写,而private只在当前类被访问,final、static方法不能被子类重写,所以不能与abstract并存。  最后修改:2019 年 12 月 31 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏