java引用变量有2个类型,一个是编译时类型,一个是运行时类型:
编译时类型:声明的类型,把它看做是什么东西
运行时类型:真正的类型,实际上指的是什么东西

如果编译时类型和运行时类型不同,就出现多态。相同类型的变量,调用同一个方法时呈现出多种不同的行为特征,这就是多态。

注意这个定义里面的关键字:方法。和方法不同,对象的属性不具备多态性。

编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象决定。记住下面一句话就好:编译决定类型,运行绑定对象

  • 当一个引用类型的变量若声明为父类的类型,但实际上引用的是子类的对象(多态情况):

此时该变量不能再访问子类中自己特有的字段和方法;
若子类覆写了父类的方法,那么此时通过变量访问到的方法,实际上是子类的方法;

  • 实现多态的机制:

父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

  • 多态的作用:

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。只修改方法的实现,不必修改方法的声明。多态的使用,一般都会出现三方,第一方是父类,第二方是子类,第三方是调用多态的方法。

继承是多态产生的前提条件:
编译时多态:方法重载
运行时多态:方法覆写 注意:静态方法不能被覆写!

  • 引用变量类型转换

向上转型(子类→父类):(自动完成) 父类名称 父类对象 = 子类实例 ;

向下转型(父类→子类):(强制完成) 子类名称 子类对象 = (子类名称)父类实例           对象名   instanceof  类;

判断指定的变量名此时引用的真正类型是不是当前给出的类或子类;注意: 对象的类型和 类必须有继承关系。

在进行强制类型转换之前,先用instanceof运算符判断是否可以成功转换,从而避免出现ClassCastException异常,这样可以使程序更加健壮。


关于多态,代码如下:

/**** @version 1L* @author  LinkinPark * @since   2014-10-28* @motto   梦似烟花心似水,同学少年不言情* @desc    ^多态的含义:编译决定类型,运行绑定对象,只是单纯的讲方法,和属性木有关系的*/
public class SubClass extends BaseClass{public String name = "LinkinPark";@Overridepublic void test(){System.out.println("当你的才华撑不起你的野心的时候,就该默默的学习了,,,");}public void test2(){System.out.println("面向对象,春暖花开,,,");}public static void main(String[] args) {//以下2行运行时类型和编译时类型一致,不会发生多态SubClass subClass = new SubClass();BaseClass baseClass = new BaseClass();//下面运行时类型和编译时类型不一致,发生多态BaseClass linkin = new SubClass();//多态是针对方法来说的,属性不具备多态性,所以编译时是什么类型,就调用那个类型的属性值System.out.println(linkin.name);//子类的方法覆盖父类方法,调用子类方法linkin.test();//子类中不存在这个方法,那么只能调用父类的了linkin.test1();//尽管运行时类型是子类,但是编译的时候仍然不能调用子类的方法,除非向下强转//linkin.test2();//养成良好的习惯,在强制类型转换时候都要instanceof下判断下类型if(linkin instanceof SubClass){((SubClass)linkin).test2();}}
}class BaseClass{public String name = "Binger";public void test(){System.out.println("你以为你以为的真是就是你以为的么???");}public void test1(){System.out.println("梦想终究还是要有的,万一实现了呢,,,");}
}

转载于:https://www.cnblogs.com/LinkinPark/p/5233165.html

linkin大话面向对象--多态相关推荐

  1. linkin大话面向对象--内部类

    内部类说白了就是类中有类 内部类:嵌套类 外部类:宿主类 内部类主要有以下作用:记住了3个字:多继承... 1,内部类提供了更好的封装,可以把内部类隐藏在外部类中,不允许同一个包中的其他类访问该类. ...

  2. linkin大话面向对象--方法详解

    1,方法的参数传递机制:值传递. 首先弄懂2个概念:形参和实参. 形参(形式参数):相当于函数(Java中也把函数称之为方法)中的局部变量,在函数被调用时创建,并以传入的实参作为起始值,函数调用结束时 ...

  3. linkin大话面向对象--接口

    接口(interface)的概念,掌握接口很重要,以后所有的编程都要面向接口编程.其实接口的内涵就7个字:规范和实现分离. 抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特 ...

  4. day8 Java学习(面向对象.多态接口)

    面向对象    多态: 概述:事物存在的多种形态.  多态前提: *要有继承关系 *要有方法重写 *要有父类引用指向子类对象. 成员变量访问:           编译看左边(父类),运行左边(父类) ...

  5. Java面向对象 ----多态

    java的第二部分 面向对象----多态 4.1面向对象的第三个特征: 多态定义: 多态可以理解为某一类事物的多种存在形态. 例如: 人 可以分为 男人 女人 动物 猫 狗 等 粮食 大米 小麦等 举 ...

  6. linkin大话设计模式--桥接模式

    linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...

  7. linkin大话设计模式--简单工厂

    linkin大话设计模式--工厂方法 什么是工厂方法:将多个类对象交给工厂来生成的设计被称为简单工厂模式,个人认为主要是为了实现解耦,在代码重构的时候会很重要. 代码如下: public class ...

  8. linkin大话设计模式--常用模式总结

    linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...

  9. linkin大话数据结构--Collection和Iterator

    linkin大话数据结构--Collection和Iterator Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系 ...

最新文章

  1. CSDN蒋涛大数据表明:DCO - 区块链时代企业级服务的全新机会
  2. 春节添彩 福州花卉市场现“买花潮”
  3. 上班族吐槽大集合:那些发生在公司的傻X奇遇
  4. python 降维 聚类_比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南
  5. python达梦数据库_python 操作达 梦数据库
  6. 某大型银行深化系统技术方案之十五:服务层之服务调用
  7. 设计模式——19.迭代器模式
  8. 【机器学习】图解机器学习神器:Scikit-Learn
  9. 软件测试电脑功率,姗姗来迟的测试——功率计实测电脑耗电情况之三【i3 2100 + H61 配置篇】...
  10. 头像加相框微信小程序
  11. 国内主机备案是干嘛的? 国内免备案主机是真的吗?
  12. 建筑施工企业工程项目成本管理与控制对策
  13. 天才小毒妃 第917章 深藏不露大财主
  14. Emily Morehouse的Python社区访谈
  15. Jetpack Compose - Modifier入门篇
  16. 犀牛云企业云网站:当我们在谈论网站建设的时候,我们在谈论什么?
  17. 自动化测试策略?如何开展自动化测试?
  18. 按行遍历和按列遍历哪一个更快一些?
  19. [转]go-kit 入门
  20. 内存控制器(以位宽为16的NOR FLASH举例)

热门文章

  1. 划分微型计算机的标志是,划分微型计算机的标志为
  2. php读取binlog,PHP解析Mysql Binlog
  3. java 容器的嵌套_java界面设计里怎么实现容器嵌套
  4. 第十七届全国大学生智能汽车竞赛 沁恒微电子芯片推荐
  5. 第16届智能车竞赛参赛队员提问-05-24
  6. 隆重介绍恩智浦MCU机器学习教育套件——OpenART
  7. Only Available on April 1st
  8. cobaltstrike安装_Cobalt Strike发送钓鱼邮件
  9. shell shocked什么意思_shell脚本从入门到放弃
  10. NETCONF 环境搭建