码迷,mamicode.com
首页 > 其他好文 > 详细

多态性的基本方法

时间:2017-07-12 21:34:41      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:类型   类的方法   void   成员变量   编译   静态   情况   对象   属性   

一、运行期类型与编译期类型

1.第一种情况:编译期类型和运行期类型相同:

              声明A的时候,使用到的类型A表示对象的类型,被称为编译期类型,在编译期,虚拟机认为a的类型是A,对于a所使用的属性和方法的有效性将到类A中去验证。

              构造方法A()中的A是运行期类型,在运行期,将执行运行期类型中的方法

2.第二种情况:当有继承关系时,可能发生编译期类型和运行期类型不同的情况,即编译期类型是父类类型,运行期类型是子类类型。

对象ab的编译期类型为父类A类,运行期类型为子类B类。

如果一个引用的编译期类型和运行期类型不同,那么一定是编译期类型与运行期类型有父类子类关系。

ab对象使用的方法,在编译期到类A中去校验,而运行则执行B类的方法

如果一个对象的编译期类型是父类,运行期类型是子类,可以对该对象进行强制类型转换,将其编译器类型转换为与运行期类型相同的类型,即:B b=(B)ab;

二、父类引用指向子类对象

当编译器类型是父类,运行期类型是子类时,被称为父类引用指向子类对象。

例子:

class Animal{

                   ……

}

                 class Cat extends Animal{

               ……

              } class Dog extends Animal {

             ……

}

            Cat m = new Cat() Animal x = new Cat() //Animal 的引用指向Cat的对象

三、多态环境下对属性和方法的调用

1.多态环境下对成员方法的调用

2.多态环境下对静态成员方法的调用

3.多态环境下对成员变量的调用

四、方法参数具有多态性

class Animal{

               void eat() {}

}

                      class Cat extends Animal{

                                                               void eat() {}

 }                    class Dog extends Animal{

                                      void eat(){}

} //方法的形式参数类型是父类类型,而传递的实际参数可以是任意子类的对象 method(Animal animal){ animal .eat(); }

多态性的基本方法

标签:类型   类的方法   void   成员变量   编译   静态   情况   对象   属性   

原文地址:http://www.cnblogs.com/adada/p/7157309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!