面向对象多态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象多态相关的知识,希望对你有一定的参考价值。

一、多态【子类就是父类】

1、 为什么使用多态

提高程序可扩展性,可维护性,提高代码可重用性

2、 什么是多态

具有表现多种形态能力的特征

同一个实现接口,使用不同的实例而执行不同的操作

3、 如何使用多态

l  方法的参数类型是父类

访问修饰符 返回类型 方法名(父类名 对象名){

……………………………………………….

}

n  调用方法时,可以传递子类的对象

l  父(子)类名 对象 = new 子类名();

l  方法名(子类对象);

l  方法的返回类型是父类

访问修饰符 父类名 方法名([参数列表]){

        return 父类对象或子类对象;

}

4、 多态中子类和父类之间的转换

a)  子类到父类的转换(向上转换)

父类 对象名 = new 子类();//自动进行转换

对象名.方法名([值]);

                向上转换的使用规则:

l  父类引用指向子类对象时称为向上转换或转型(upcasting),自动进行类型转换

l  通过父类引用变量,调用的方法是子类覆盖(重写)或继承父类的方法

l  通过父类引用变量,无法调用子类特有的方法

b)父类到子类的转换(向下转换)——强制类型转换,还原对象的真实面目(具体是哪种子类)

              父类 对象名 = new 子类();

                对象名.子类方法();//编译有错误

       应修改为:

                父类 对象名 = new 子类();

                子类 子类对象 =(子类)对象名;

                子类对象.子类方法();

 

        c)、运算符instanceof

l  作用:避免父类向子类进行转换时出现异常,进行类型的判断(判断对象是否属于一个类或实现了一个接口,返回一个布尔类型的值【true或false】)

l  注意:该运算符,通常和强制类型转换结合使用

if(对象名 instanceof 类名){

    类名 对象=(类名)对象名;

}

对象名和类名必须存在继承关系,否则is语句编译错误

以上是关于面向对象多态的主要内容,如果未能解决你的问题,请参考以下文章

举例说明java面向对象的封装继承多态

设计模式面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 )

JAVA面向对象,继承、封装、多态

python面向对象(封装继承多态)+ 面向对象小栗子

.啥是多态?面向对象程序设计为啥要引入多态的特性?使用多态有啥优点?

0面向对象三大机制 封装继承多态