面向对象的多态性

来源:互联网 发布:医学图像算法工程师 编辑:程序博客网 时间:2024/05/17 01:53

学习目标:

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

2. 面向对象的多态性

3. 抽象类与接口

 

A.Object类

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

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

       默认基类为Object类

      

     a.toString方法

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

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

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

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

          向的内存地址

         


         


             

 

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

       


       

                             

     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方法

         

            

B.多态性

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

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

     a.多态的体现

       1.从方法的角度来看

         ·方法的重载和重写

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

                                  功能也不同

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

       2.从对象的角度来看

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

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

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

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

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

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

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

        

        

        

        

  

     

     

         

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

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

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

   


    

     

         

     b.instanceof关键字

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

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

     


        


        

    


          

    c.final关键字

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

       2.注意:

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

              常量,只能赋值一次

              final 类型  variableName;

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

              局部变量时不做要求

                                              

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

              final 返回值类型  methodName(paramList)

              {

                  …

              }

              

              

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

              final classfinalClassName{

                  …

              }

                          

               

C.抽象类与接口

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

         abstract class 抽象类名{

         }

 

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

      的子类

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

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

      被定义为抽象类

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

      个抽象类

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

                      


                    


                    

                     

                             

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

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

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

         


         

     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:

             

             

             

             

             

              

          eg2:

             

             

             

              

              

          eg3:

             

             

              

              

               

               

          eg4:

              

              

               

               

                

                 

       

 

        

        

  

         

           

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 scanIP 按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50% c语言输入三个数字 c语言如何输入三个数求平均值 c语言如何输入三个数求和 C语言为什么只录入了第一个数字 输入多个数字 c语言scanf只有第一个数字 scanf三个整数 double double类型 www和http 会计 日记账 myamnatfound IntroductiontoIoT IntroductiontoIoT 使用哪种类型的无线网络连接城市中的设备来创建城域网 傲世九重天绿帽版 节日 第一章《Java》的思维导图 《Java》的思维导图 python登录大华摄像机 2019普通高等学校招生全国统一考试诊断卷a 考前诊断卷 Travelingsalesmenofnhn.(theprestigiousKoreanintern www。qwer123。com Ubuntu --------------------------http://s.jiafeiyun.com/p getpid函数执行过程 增量模型 Hresult:0x80041966 qt音视频 verilig verilogifinput 安卓代码 用10进制数变成二进制数 用安卓语言将10进制数装成二进制数 bjui一个页面切换两个搜索 一个页面切换两个table实现搜索和分页排序 js实现table排序