多态性
2019-12-19 16:04:37来源:博客园 阅读 ()
多态性
多态性,是面向对象中最重要的概念,在java中有两种体现:
方法的重载(overload)和重写(overwrite)。
对象的多态性——可以直接应用在抽象类和接口上。
java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
若编译时类型和运行时类型不一致,就出现多态(polymorphism)。
对象的多态,在java中,子类的对象可以替代父类的对象使用
一个变量只能有一种确定的数据类型。
一个引用类型变量可能指向(引用)多种不同类型的对象。
Person p = new Student();//Person类型的变量p,指向Student类型的对象。
子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting)(子类的对象可以被父类的引用变量使用)。
一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法。
Student m = new Student();
m.school = "pku"; //合法,Student类有school成员变量
Person e = new Student();
e.school = "pku"; //非法,Person类没有school成员变量
属性是在编译时确定的,编译时e为Person类型,没有school成员变量,所以编译错误。
虚拟方法调用
编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的方法。
java的方法时运行在栈内存中的,运行方法时会动态进栈和出栈。
多态小结
前提:需要存在继承或实现关系。要有覆盖操作。
成员方法:成员方法的多态性,也就是动态绑定,必须得存在与方法的重写之上。
编译时:要查看引用变量所属的类中是否有所调用的方法。
运行时:调用实际对象所属的类中的重写方法。
成员变量:不具备多态性,只看引用变量所属的类。
子类继承父类
若子类重写了父类方法,就意味着子类里定义的方法彻底覆盖了父类里的同名方法,系统将不可能把父类里的方法转移到子类中。
对于实例变量则不存在这样的现象,即使子类里定义了和父类完全相同的实例变量,这个实例变量依然不可能覆盖父类中定义的实例变量。
多态性应用举例
方法声明的形参类型为父类类型,可以使用子类的对象作为实参调用该方法。
原文链接:https://www.cnblogs.com/fangfangfanga/p/12070638.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:分页查询与显示
- 面对对象(2) 2020-05-28
- Java笔记:Java面向对象 2020-05-17
- Java面向对象 2020-05-13
- 面向对象的三大特性 2020-05-13
- Java三大特性 2020-05-13
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