Java之多态
2017-05-05 22:14
295 查看
多态,字面意思就是多种状态,不同的时期,处于不同的状态。那java中的多态该怎样理解呢?
我们都知道,面向对象的三大特征:封装,继承,多态,关于多态,我们下面先来看一段代码:
此段代码意思很简单,一共有两个类,父类SuperClass有一个成员变量a,成员方法base和run。
子类SubClass继承SuperClass,有成员变量a,b,及成员方法run和extend。
如果我们想调用SuperClass相关内容,则就可以使用1方式,如果想调用SubClass相关内容,一般我们使用的是2这种方法,但是对于3,许多初学者应该是感到有疑问的,而正是这里,涉及到有关多态方面的东西。
首先,sc被定义成SuperClass的实例类型,则sc在编译时期,应当是属于SuperClass类型,但是实际上,我们赋予他的值是SubClass类型的,那么他在运行时期就属于SubClass类型。一般情况下,我们应该保证的是一个变量不管是编译期间,还是运行期间,应该尽可能的保证类型的一致,但是这种不一致,在Java中就被称为多态。
既然在编译期是属于SuperClass类型,则4处可以编译通过,但是5处,由于SuperClass不存在b成员变量,因此编译将无法通过。关于4处打印的值,我们知道,运行时期是SubClass类型,则其运行期间就为SubClass的实例,那么其值就为200。
综上所述,变量类型在编译期和运行期类型的不一致,就称为多态。
我们都知道,面向对象的三大特征:封装,继承,多态,关于多态,我们下面先来看一段代码:
class SuperClass{ public int a = 100; public void run(){ System.out.println("父类 run 方法!"); } public void base(){ System.out.println("父类 base 方法!"); } } public class SubClass extends SuperClass{ public int b = 200; public void run(){ System.out.println("子类 run 方法!"); } public void extend(){ System.out.println("子类 extend 方法!"); } public static void main(String[] argv){ SuperClass sp = new SuperClass(); // 1 SubClass sb = new SubClass(); // 2 SuperClass sc = new SubClass(); // 3 System.out.println(sc.a); // 4 System.out.println(sc.b); // 5 } }
此段代码意思很简单,一共有两个类,父类SuperClass有一个成员变量a,成员方法base和run。
子类SubClass继承SuperClass,有成员变量a,b,及成员方法run和extend。
如果我们想调用SuperClass相关内容,则就可以使用1方式,如果想调用SubClass相关内容,一般我们使用的是2这种方法,但是对于3,许多初学者应该是感到有疑问的,而正是这里,涉及到有关多态方面的东西。
首先,sc被定义成SuperClass的实例类型,则sc在编译时期,应当是属于SuperClass类型,但是实际上,我们赋予他的值是SubClass类型的,那么他在运行时期就属于SubClass类型。一般情况下,我们应该保证的是一个变量不管是编译期间,还是运行期间,应该尽可能的保证类型的一致,但是这种不一致,在Java中就被称为多态。
既然在编译期是属于SuperClass类型,则4处可以编译通过,但是5处,由于SuperClass不存在b成员变量,因此编译将无法通过。关于4处打印的值,我们知道,运行时期是SubClass类型,则其运行期间就为SubClass的实例,那么其值就为200。
综上所述,变量类型在编译期和运行期类型的不一致,就称为多态。
相关文章推荐
- 多态,你烦不烦?--Java
- C++和java中多态机制的异同
- Java编程:多态和向上转型
- Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳
- Java 课堂记录 03 (继承与多态)
- 理解JAVA多态
- 新东方之java多态之老师也是人
- java----------测试对象类型的多态实现
- thingking in java 读书笔记---复用和多态
- java 多态与抽象工厂-----------菜鸟学飞第二步
- java多态要注意的一个问题
- Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳
- JAVA学习笔记之七继承和多态
- Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳
- java 多态与抽象工厂-----------菜鸟学飞第二步
- java 中的接中与多态
- java之多态,
- java基础 ---继承和多态
- java方法的重载、覆盖和隐藏,以及多态的区别
- 通过实例说明Java中的多态