- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
引用转型 类型之间存在转型的概念,这个我们前面已经接触过 对于基本类型转型我们有自动转型和强制转型 无论是哪种转型都有个前提条件:类型兼容 而引用转型我们分为向上转型和向下转型,同样无论使用哪种转型都需要有个前提条件:必须有继承关系,对比继承一章的继承树图就是目标类型和源类型必须位于同一分支上 向上转型 Animal pet=new Dog(); 一个类的对象被其父类所引用,这个类的对象相当于被向上提升为父类类型,这个过程称为向上转型 请注意这个过程将会使得子类的特征暂时被丢失 pet能访问的成员由所声明的类型Animal决定,但是方法执行的时候则由引用的具体对象实现 在Java中向上转型是种安全的操作,和现实生活中一样,我们隶属于人这个类型自然可以认为我们都是人,都可以执行人的基本操作,拥有人的基本特征 向下转型 当将子类对象转型为父类类型后会暂时丧失子类本身的特征,这个时候需要将类型还原为子类类型,这个过程我们称为向下转型 Dog dog=(Dog)pet; 向下转型是不安全的,需要我们显示指定具体类型, 编译的时候只会检查是否类型兼容,如果类型不和对象实际类型匹配,那么运行的时候会触发错误而导致程序出现异常 关于引用转型 对于对象之间的转型需要小心谨慎,在应用转型的时候需要注意如下原则: 子类对象可以视为其父类的一个对象 父类对象不能被当作是其某一个子类的对象 如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数传递 如果父类对象引用指向的实际是子类对象,那么这个父类对象的引用可以用强制类型转换转化为子类对象的引用 * 什么是多态 简单来说,多态是具有表现多种形态的能力的特征 彩色打印机 打印机 黑白打印机 打印效果:彩色 打印效果:黑白 打印 打印 多态的意义 多态允许将子类类型的引用赋值给父类类型的引用,从而使得父类类型的引用操作时候会根据当前实际子类类型的特性和操作方法运作 多态的程序功能扩展的重要实现手段 机场可以起飞任何飞机,任何飞机都是飞机Plane类型,并拥有fly()方法 多态让程序能处理多种类型对象,是解决相似性问题的方法 public class Airdrome{ public void flying(Plane plane){ plane.fly(); } } 多态的多种形式 多态的实现与方法息息相关,前面提到的方法重载和方法重写都是实现多态的手段 多态根据实现的形式有多种形式 多态 特殊多态性 通用多态性 强制多态 重载多态 参数化多态 覆写多态 强制多态 强制多态隐式地将参数按某种方法,转换成编译器认为正确的类型以避免错误,属于一种隐式类型的方法 如: 2+2.0; superRefersTo=subObject; 强制多态排除了麻烦的类型转换和编译错误 重载多态 将一个标志符作用多个意义,称为重载.在Java以前的一些面向对象语言中将重载划分为操作符重载和方法(函数)重载 如:2+”2”和2+2; 但是在Java中不支持用户自定义操作符重载,不过支持方法重载 一个类中可以拥有多个名字相同的方法,但是这些方法参数必须保持唯一(数量,顺序,类型),编译器以参数的不同来区别这些方法. 重载多态允许用相同的名字表示不同的方法 参数化多态 从JDK5.0开始由于加入泛型,便出现了一种称为参数化多态的做法 和C++的模板类似,可以通过指定任意一种类型来使用这个类 public class GenericT{ T obj; public Generic(T obj){ this.obj=obj; } public T getObject(){ return obj; } public void showType(){ System.out.println(str.getClass().getSimpleName()); } } public class Test{ public static void main(String []args){ GenericString str=new GenericString(“参数”); GenericInteger num=new GenericInteger(20); str.showType(); num.showType(); } } 覆写多态 父类引用指向子类对象后,通过父类引用在运行时动态定位实际的子类对象决定调用方法的执行.这个过程称为覆写多态,也是最常见的多态形式 动态确定对象的行为是多态的精髓 多个类的公共特性抽象为公共父类,在公共父类中实现一些通用的方法代码,以减少子类中的代码冗余,提高软件的复用性.并且充分利用Java的多态性,让父类
文档评论(0)