Java进阶知识体系 (一)、类和对象 (二)、方法和封装 (三)、static关键字和继承 (四)、多态 (五)、特殊类
(四)、多态 1,多态 多态的概念 多态主要指同一种事物表现出来的多种形态。 饮料:可乐、雪碧、红牛、脉动、… 宠物:猫、狗、鸟、小强、鱼、… 人:学生、教师、工人、保安、… 图形:矩形、圆形、梯形、三角形、…
另一种表述 在java里,多态是同一个行为具有不同表现形式或形态的能力,即对象多种表现形式的体现,就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。 多态的语法格式 父类类型 引用变量名 = new 子类类型(); 如: Shape sr = new Rect(); sr.show();
多态前提 1)有继承或者实现 2)方法重写 3)父类引用指向子类对象 Dog extends Animal 关系 Animal an = new Dog(); // 把dog对象的引用赋值给了父类Animal, 向上数据类型提升.
多态的特点 当父类类型的引用指向子类类型的对象时,父类类型的引用可以直接调用父类独有的方法;父类类型引用不可以直接调用子类独有的方法。
对于父子类都有的非静态方法来说,编译阶段调用父类版本,运行阶段调用子类重写的版本(动态绑定)。 成员变量:编译看左边(看看父类中有没有这个成员变量,如果没有报错)运行看左边(运行的是父类的该成员 成员方法: 编译看左边(看看父类中有没有这个成员方法,如果没有报错)运行看右边(运行的是子类的该方法)
对于父子类都有的静态方法来说,编译和运行阶段都调用父类版本。
引用数据类型之间的转换 引用数据类型之间的转换方式有两种:自动类型转换 和 强制类型转换。 自动类型转换主要指小类型向大类型的转换,也就是子类转为父类,也叫做向上转型。 强制类型转换主要指大类型向小类型的转换,也就是父类转为子类,也叫做向下转型或显式类型转换。 引用数据类型之间的转换必须发生在父子类之间,否则编译报错。
强转前做判断 若强转的目标类型并不是该引用真正指向的数据类型时则编译通过,运行阶段发生类型转换异常。 为了避免上述错误的发生,应该在强转之前进行判断,格式如下: if(引用变量 instanceof 数据类型) 判断引用变量指向的对象是否为后面的数据类型
多态的实际意义 多态的实际意义在于屏蔽不同子类的差异性实现通用的编程带来不同的效果。 优点:提高代码的扩展性;提高代码的维护性(由于继承)
弊端:不能调用子类特有的方法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/2106.html