精华内容
下载资源
问答
  • 什么是多态

    2019-08-20 20:45:31
    什么是多态 多态的特点 多态存在的三个必要条件 多态时成员变量、静态方法和非静态方法的特点 什么是多态 多态就是一个对象变量可以指向多种实际类型的现象,同一个事件发生在不同的对象上会产生不同的结果。 ...

    目录

    什么是多态

    为什么要用多态

    多态存在的三个必要条件

    多态怎么用

       A、引用多态

       B、方法多态

     

     

    什么是多态

    多态就是一个对象变量可以指向多种实际类型的现象,同一个事件发生在不同的对象上会产生不同的结果。   

    多态也叫后期(动态)绑定(在运行时根据对象的类型进行绑定)

     

    前期绑定:非面向对象编程,编译器会产生对一个具体函数的调用,运行时调用代码的绝对地址。c语言的调用就是前期绑定,而java除了static和final方法,其他都是后期(动态)绑定,换一个角度来说:多态不能作用于static和final

    后期绑定:直到向对象发送消息时,才能确定被调用的代码

     

    为什么要用多态

    好处:使用多态可以消除类型之间的耦合关系

               通过分离做什么和怎么做,从另一角度将接口和实现分离开来。

    弊端:不能用子类方法,可用转型的方法解决(下面会有说到)

     

    多态存在的三个必要条件

    • 继承
    • 重写
    • 父类引用指向子类对象:fu p=new zi();

     

    多态怎么用

          A、引用多态

                          父类的引用可以指向本类的对象;

                          Fu fu=new Fu();

                          父类的引用也可以指向子类的对象;

                          Fu fu =new Zi();

     

                        剖析:Fu fu=new Zi();

                        这句话分为两段,下面这样写会更加明确些

                        1、Fu fu  ;  声明一个变量fu为Fu这个类,

                        2、fu=new Zi(); 创建一个Zi类对象赋给了fu变量

                        这句话的作用是得到了一个被Zi类函数覆盖后的Fu类对象:fu

                        明确:fu是Fu类的,更具体的说是被zi类覆盖后的fu类的对象!从头到尾都是fu类。

                        进一步结论:   【多态时成员变量、静态方法和非静态方法的特点】

                        1、fu类原有的变量和静态方法(因为没被zi类覆盖的方法)没有任何变化,所以编译和运行都看fu类

                        2、而fu类中的非静态方法(被zi类覆盖)发生了变化,在编译阶段看fu类的(看fu类有没有,有的话编译通过),运行的时候运行的是zi类的代码。

                      (其实对于静态方法,是不需要对象的。直接用类名调用即可。)

     

          B、方法多态

    根据上述创建的两个对象:本类对象和子类对象,同样都是父类的引用,当我们指向不同的对象时,它们调用的方法也是多态的。

    创建本类对象时,调用的方法为本类方法;

    创建子类对象时,调用的方法为子类重写的方法或者继承的方法;

     

    使用多态的时候要注意:如果我们在子类中编写一个独有的方法(没有继承父类的方法),此时就不能通过父类的引用创建的子类对象来调用该方法!!!(因为fu是Fu对象,他并没有子类的方法)

     

     

     

    多态也会涉及到向上转型和向下转型(都是编译时期的转型),而向下转型又可以引出泛型

     

    转型:

    ·向上转型:【自动】父类 父类对象 = 子类实例;

    Fu f=new zi();

    ·向下转型:【强制】子类 子类对象 = (子类)父类实例;

    Zi z=(zi)f;

     

    多态一般可以分为两种,一个是重写override(运行时多态),一个是重载overload(编译时多态)。


     

     

     

     

     

     

     

    展开全文
  • Java面向对象程序设计 多态 主讲人何鑫 软件技术专业教学资源库 什么是多态 第二部分 什么是多态 多态是具有表现多种形态的能力特征即同一个实现接口引用类型使用不同的实例而执行不同操作 也可理解为相同的消息给予...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,174
精华内容 5,669
关键字:

什么是多态