面向对象的多态性

学习目标:

1. Object类的toString()与equals(Object  obj)方法

2. 面向对象的多态性

3. 抽象类与接口

 

A.Object类

     ·Object类是所有Java类的根基类(“祖先类”)

     ·如果在类的声明中未使用extends关键字指明其基类,则

       默认基类为Object类

      

     a.toString方法

        1.Object类中定义有public  String toString()方法,

          其返回值是String类型,描述当前对象的有关信息

       ***如果直接打印某对象的引用,则默认会调用这个对象的

          toString()方法,默认打印的内容中包含这个引用所指

          向的内存地址

         面向对象的多态性_第1张图片


         面向对象的多态性_第2张图片


             

 

       2.可以根据需要在用户自定义类中重写toString()方法

       面向对象的多态性_第3张图片


       面向对象的多态性_第4张图片

                             

     b.equals( )方法

        1.Object类中定义有publicboolean equals(Object obj)

          方法,提供定义对象是否“相等”的逻辑

       2.Object的equals方法定义为:x.equals(y),当x和y指向同

         一个地址时返回true,否则返回false

       3.String类中已经重写了equals(Object obj)方法,重写后的

         方法比较的是两个字符串的内容是否一样

         (注意:==比较对象的引用)

       4.可以根据需要在用户自定义类型中重写equals方法

         面向对象的多态性_第5张图片

            

B.多态性

     ·封装是为了保护属性的一种操作,继承是为了扩展类的功能

     ·是由封装性继承性引出的面向对象程序设计语言的另一种特征

     a.多态的体现

       1.从方法的角度来看

         ·方法的重载和重写

          (1)重载(overloading):根据传入的参数不同,完成的

                                  功能也不同

          (2)重写(override):子类根据需求重写父类中的方法

       2.从对象的角度来看

         ·对象的多态性主要分为两种:

          (1)向上转型:子类对象--->父类对象(程序会自动完成)

                格式:父类  父类对象=子类实例

               或者  父类  父类对象=new 子类

            ***向上转型后,因为操作的是父类对象,所以无法找

               到在子类中定义的新方法;但如果子类重写了父类的

               某个方法,则调用的是重写后的方法  

        面向对象的多态性_第6张图片

        面向对象的多态性_第7张图片

        

        面向对象的多态性_第8张图片

  面向对象的多态性_第9张图片

     面向对象的多态性_第10张图片

     面向对象的多态性_第11张图片

         

          (2)向下转型:父类对象--->子类对象 (必须明确的指明转型的子类类型)

               格式:子类  子类对象=(子类)父类实例

               注意:向下转型前先要向上转型

   面向对象的多态性_第12张图片


    面向对象的多态性_第13张图片

     面向对象的多态性_第14张图片

         

     b.instanceof关键字

       1.在java中可以使用instanceof关键字判断一个对象是否属于一个类的实例

       2.格式:对象  instanceof  类--->返回boolean类型

     面向对象的多态性_第15张图片


        面向对象的多态性_第16张图片


        面向对象的多态性_第17张图片

    面向对象的多态性_第18张图片


          面向对象的多态性_第19张图片

    c.final关键字

       1.在JAVA中声明类、属性和方法时,可以使用关键字final来修饰

       2.注意:

         (1)final修饰变量(成员变量或局部变量),则成为

              常量,只能赋值一次

              final 类型  variableName;

              修饰成员变量时,定义时同时给出初始值,而修饰

              局部变量时不做要求

                                              面向对象的多态性_第20张图片

         (2)final修饰方法,则该方法不能被子类重写

              final 返回值类型  methodName(paramList)

              {

                  …

              }

              面向对象的多态性_第21张图片

              面向对象的多态性_第22张图片

         (3)final修饰类,则类不能被继承

              final classfinalClassName{

                  …

              }

                          

               

C.抽象类与接口

    ·用abstract修饰的类即为抽象类

         abstract class 抽象类名{

         }

 

    ·抽象类不能被实例化,必须被继承,抽象方法必须被重写,生成它

      的子类

    ·abstract修饰的方法就是抽象方法,抽象方法没有方法体

    ·抽象类不一定要包含抽象方法,若类中包含了抽象方法,则该类必须

      被定义为抽象类

    ·如果一个子类没有实现抽象父类中所有的抽象方法,则子类也成为一

      个抽象类

    ·构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法

                      面向对象的多态性_第23张图片


                    面向对象的多态性_第24张图片


                    面向对象的多态性_第25张图片

                     面向对象的多态性_第26张图片

                             

      ***如果子类也是一个抽象类,则可以不用重写父类的抽象方法,但是

         当子类的子类为非抽象类时,子类的子类要重写子类的抽象方法,

         并且要将子类未重写的父类的抽象方法也写上

         面向对象的多态性_第27张图片


         面向对象的多态性_第28张图片

     a.接口

        ·接口(interface)是抽象方法和常量值的定义的集合

        ·接口是一种“标准”、“契约”。

        ·从本质上讲,接口是一种特殊的抽象类,这种抽象类中只能包含

          常量和方法的定义,而没有变量和方法的实现

        1.接口的声明语法

          (1)包括接口声明和接口体

          (2)完整的接口声明:

            [public] interface接口名称[extends listOfSuperInterface] { … }

          (3)接口体包括常量定义和方法定义

               ·常量定义: typeNAME=value;  该常量被实现该接口的多

                 个类共享; 具有public,final, static的属性.

               ·方法体定义:具有 public和abstract属性

        2.接口的实现类

          (1)与抽象类一样,接口要使用也必须通过子类,子类通过

               implements关键字实现接口

          (2)一个类可以实现多个接口,implements子句中用逗号分开

          (3)非抽象子类必须实现接口中定义的所有方法

          (4)实现格式:

               ·class子类 implements接口A,接口B…{

                 }

        3.接口的使用规则

          (1)接口中所有的方法都是public abstract 

          (2)在接口中声明方法时,不能使用static,final,synchronized,

               private,protected等修饰符

          (3)一个接口可以继承自另一个接口

          (4)java中不允许类的多继承,但允许接口的多继承

          (5)接口中可以有数据成员,这些成员默认都是public static final

        4.接口的用途

          (1)通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系

          (2)通过接口指明多个类需要实现的方法

          (3)通过接口了解对象的交互界面,而无需了解对象所对应的类

        5.eg1:

             面向对象的多态性_第29张图片

             面向对象的多态性_第30张图片

             面向对象的多态性_第31张图片

             面向对象的多态性_第32张图片

             面向对象的多态性_第33张图片

              

          eg2:

             

             面向对象的多态性_第34张图片

             

              面向对象的多态性_第35张图片

              

          eg3:

             

             面向对象的多态性_第36张图片

              面向对象的多态性_第37张图片

              

               面向对象的多态性_第38张图片

               

          eg4:

              

              面向对象的多态性_第39张图片

               面向对象的多态性_第40张图片

               面向对象的多态性_第41张图片

                面向对象的多态性_第42张图片

                 

       

 

        

        

  

         

           

你可能感兴趣的:(JavaSE)