多态

来源:互联网 发布:6603棋牌 数据库 编辑:程序博客网 时间:2024/06/05 14:35

        什么是多态?一个对象,两种形态。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;}
多态时,成员的特点:

①成员变量

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

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

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

②成员函数(非静态)

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

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

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

③静态函数

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

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

        简单来说,就是编译和运行都看等号的左边。其实多态性是指的对象的多态性,而对于静态方法是不需要创建对象的,直接类名调用就可以了。

0 0
原创粉丝点击