Java多态
Posted bbibbi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多态相关的知识,希望对你有一定的参考价值。
1 概念
Java有三大特性:封装、继承和多态。那么什么是多态呢?所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。简单来说就是根据不同情况调用不同的方法。
2 重载和重写
网上查了下,有人说 :重载也是一种多态,不过是一种特殊的多态,是编译时决定的静态多态。但网上又有人说重载是多态的静态绑定,重写是多态的动态绑定。其实java里方法被封装后也可以是对象,多态的必要条件虽然可以理解是继承和重写,但多态分为行为(方法)多态和对象多态,行为多态是重写和重载,对象多态是向上下转型。 简单的说,重写是父类与子类之间多态性的体现,而重载是一个类的行为的多态性的体现。
3 多态的必要条件
继承;重写;父类引用指向子类对象(向上转型)。
4 多态的优点
扩展性强,定义了一个Animal a;我可以定义a = new Cat();也可以定义a = new Dog();不同定义具有不同实现。
5 多态是个什么对象
father instanceof Son 输出true,但是作为Son对象参数却报错了。那这个father到底是什么鬼东西?总而言之就是动态绑定(编译看左边,运行看右边)。
1、java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法;
2、父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private、非 final 方法),那么这个对象调用该方法时默认调用的时子类重写的方法,而不是父类的方法;
3、对于java当中的方法而言,除了final,static,private 修饰的方法和构造方法是前期绑定外,其他的方法全部为动态绑定;(编译看左边,运行看右边)
6 静态绑定
总结一下静态绑定存在于以下几种情况
1. 类方法
2. 私有方法(不会被继承)
3. 访问成员变量
以上是关于Java多态的主要内容,如果未能解决你的问题,请参考以下文章