20.面向对象-----多态性
2020-03-29 16:01:54来源:博客园 阅读 ()
20.面向对象-----多态性
一、多态性的理解
一个事物的多种形态。
二、对象的多态性
父类的引用指向子类的对象。
例如:
Person p = new Man();//Man是Person的子类
Object obj = new Date();
说明:
Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。简称:编译时,看左边;运行时,看右边。如果编译时的类型和运行时的类型不一致,就出现了对象的多态性。举例:
public class test { public static void main(String[] args) { Animal animal = new Cat(); //实际执行的是子类重写后的eat() animal.eat(); } } class Animal{ String name; int age; public void eat(){ System.out.println("动物进食"); } } class Cat extends Animal{ public void eat(){ String ability; System.out.println("猫类进食"); } }
三、虚拟方法调用
子类继承父类以后,对父类中的方法进行类重写。实例化父类的引用执行子类的对象(多态性),在编译器,只能调用父类中声明的方法,但是在运行期,实际执行的是子类重写父类的方法。
四、多态性使用的前提
①子父类继承关系;
②子类重写父类的方法;
注意:
多态性的使用仅适用于方法,不适用于属性。
五、动态绑定
编译时看左边,运行时看右边。
六、向上转型和向下转型
1.向上转型:多态性
2.向下转型
问题的引入:
有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。如何才能调用子类特的属性和方法?使用向下转型。
如何实现向下转型?
使用强制类型转换符:()
七、instanceof的使用
在使用向下转型的过程中,可能出现ClassCastException的异常。因此,在进行强转之前,要使用instanceof判断某个对象是否是某个类的实例。如果返回true,就进行向下转型;如果返回false,不进行向下转型。
如何使用?
a instanceof A:判断对象a是否是类A的实例。
如果B是A的父类,a instanceof A返回true,则a instanceof B也返回true。
图示:
public class test { public static void main(String[] args) { Person p = new Student(); if (p instanceof Person){ Student s = (Student)p; s.major = "英语"; System.out.println(s.major);//英语 }else{ System.out.println("不匹配的类型"); } } } class Person{ String name; int age; public void eat(){ System.out.println("人吃饭"); } public void sleep(){ System.out.println("人睡觉"); } } class Student extends Person{ String major; public void eat(){ System.out.println("学生吃饭"); } public void study(){ System.out.println("学生努力学习知识"); } }
作者:Java之美
日期:2020-03-29
原文链接:https://www.cnblogs.com/897463196-a/p/12592494.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:java~线程池的总结~续
- 通过与C++程序对比,彻底搞清楚JAVA的对象拷贝 2020-06-11
- Java笔记:集合 2020-06-10
- Java基础复习——类和对象 2020-06-09
- JSP九大内置对象 2020-06-07
- java对象指向问题 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash