多态
来源:互联网 发布: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;}多态时,成员的特点:
①成员变量
编译时,参考引用型变量所属的类中是否有调用的成员变量,有,编译通过。没有,编译失败。
运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。
简单来说,就是编译和运行都看等号的左边。
②成员函数(非静态)
编译时,参考引用型变量所属的类中是否有调用的函数,有,编译通过。没有,编译失败。
运行时,参考的是对象所属的类中是否有调用的函数,有,运行对象所属的类中的函数。
简单来说,编译看左边,运行看右边。这是因为成员函数的覆盖性所造成的。
③静态函数
编译时,参考引用型变量所属的类中是否有调用的静态函数方法。
运行时,参考引用型变量所属的类中是否有调用的静态函数方法。
简单来说,就是编译和运行都看等号的左边。其实多态性是指的对象的多态性,而对于静态方法是不需要创建对象的,直接类名调用就可以了。