您的位置:首页 > 其它

多态

2015-08-02 20:34 204 查看
什么是多态?一个对象,两种形态。Person p = new Student();学生既具有学生本身的性质,还具有人的性质。一种事物多种形态,这就是对象的多态性。多态在代码中体现就是,父类的引用指向子类的对象。多态提高了代码的扩展性,前期定义的代码可以访问后期定义的内容,但前期定义的内容无法访问后期子类特有的内容。多态的前提:①必须要有关系,继承或者实现。②要有覆盖。

Person p = new Student();所创建的对象的引用是Person类型的,对象提升为Person类型,向上转型,p无法访问Student中定义的特有方法。向上转型,将子类隐藏,不再访问子类的特有方法。如果需要访问子类的特有方法,可以将子类对象向下转型,Student p1 = (Student) p;这样就可以使用子类中特有的方法。

关键字 instanceof常用于判断对象的具体类型,只能用于引用数据类型的判断,通常在向下转型前用于健壮性的判断。

if(p instanceof Student)
{
Student p1 = (student) p;
}
多态时,成员的特点:

①成员变量

编译时,参考引用型变量所属的类中是否有调用的成员变量,有,编译通过。没有,编译失败。

运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。

简单来说,就是编译和运行都看等号的左边。

②成员函数(非静态)

编译时,参考引用型变量所属的类中是否有调用的函数,有,编译通过。没有,编译失败。

运行时,参考的是对象所属的类中是否有调用的函数,有,运行对象所属的类中的函数。

简单来说,编译看左边,运行看右边。这是因为成员函数的覆盖性所造成的。

③静态函数

编译时,参考引用型变量所属的类中是否有调用的静态函数方法。

运行时,参考引用型变量所属的类中是否有调用的静态函数方法。

简单来说,就是编译和运行都看等号的左边。其实多态性是指的对象的多态性,而对于静态方法是不需要创建对象的,直接类名调用就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: