• 第九天学习


                

                    黑马程序员  第九天笔记 

                <a href="http://www.itheima.com" target="blank">java培训</a>

    1.多态的概述

          生活中,一个事物表现出来的不同形态。

          程序中多态的前提:

      要有继承,(或者是实现—接口)

      方法的重写

      父类的引用指向自己的子类对象

      程序的多态指的是对象的多态性。

    2.根据多态的前提,写案例

     父类的引用指向自己的子类对象

       多态的调用方法:运行子类重写

       好处:扩展性很强,代码重复利用也很高,维护性很强

       代码演示:

           

       演示结果:

      

    3.多态中成员访问的特点

      A.非静态成员变量的特点

            编译时期,看父类中有没有变量,有编译成功,没有编译失败

            运行时期,运行的是父类中的变量

     B.静态成员变量的特点

          编译时期,看父类中有没有变量,有编译成功,没有编译失败

          运行时期,运行的是父类中的变量

     C.非静态成员方法特点:

      编译时期,看父类中有没有这个方法,有编译成功,没有编译失败

      运行时期,运行是子类重写后的方法

     D.静态成员方法特点:

      编译时期,看父类中有没有这个方法,有编译成功,没有编译失败

      运行时期,运行是父类中的方法

     总结:多态中,除了非静态方法以外,编译看左边,运行看左边

     只有非静态的方法,编译看左边,运行看右边 (左边只等号的左边)

    代码演示:

             

            

    演示结果:

         

    4.多态中的转型

        父类引用=子类对象();

      子类和父类类型,数据类型不同,不能直接运算,需要类型转换

      自动转换,小的转成大的,子类自动提升为父类的类型,向下转型

      格式:

       目标类型 变量=(目标类型)被转数据  

    代码演示:孔子装爹

            

    演示结果:

          

    5.多态转型中的类型判断 instance of运算符(用于检查类的类型转换异常)

       关键字,也是运算符 instance of 运算,结果是布尔类型

       检查引用变量是不是这个类创建的

      固定格式:

         引用变量 instanceof 类

         在if语句中写a instanceof b。  判断a 是不是b对象,如果是运算符返回true

         使用子类特有功能,需要强制转换,保证安全,使用instanceof判断

    代码演示:

            

            

    演示结果:

         

    6.多态的设计原理

         为什么多态中,有的走父类,有的走子类

         编译为什么看左边  Fu f = new Zi();

          编译期间特点,检查语法问题,变量没有值,对象也是不存在

          编译的时候,看见左边的类类型变量,看不到对象具体是谁

          除了非静态的成员方法以外,运行时期,JVM静态的绑定在父类的引用中

          但是如果运行的是非静态成员方法,运行时期,JVM动态绑定在子类的对象中,会调用子类的重写方法

           为什么,必须运行子类重写方法,设计的原因,扩展父类

           子类重写父类方法,目的就为了沿袭父类功能,扩展自己的功能

    7.抽象类概述

         一个方法没有具体的主体实现,没有逻辑。这样的方法,叫做抽象方法。

        如果一个类中,有抽象方法,这个类应该是一个抽象类

        关键字,修饰符abstract 抽象的,修饰类,修饰方法

        抽象类不一定有抽象方法,抽象方法一定是在抽象类中

    8.定义抽象类

      先写抽象方法 :abstract 修饰,没有方法体,没有大括号,直接分号结束

      抽象类不能实例化,不可以new对象

      但是可以定义子类,继承抽象类,重写抽象方法,建立子类对象

    代码演示:

            

    演示结果:

           

    9.抽象方法的特点

       抽象类不一定有抽象方法,但是抽象方法一定是在抽象类中

       有成员变量,和普通类一致。

      抽象类中可以有静态方法,不能有非静态方法,类名.方法名调用。

      抽象类中可以有静态成员,不能有非静态成员,类名. 成员名调用。

      抽象类中有构造方法。第一行必须是super();

      不可以建立对象,构造方法的作用,建立对象给成员变量赋值。

    10.子类继承后的意事项

       子类没有覆盖抽象方法,子类还是一个抽象类。不能new对象

       如果子类覆盖了一部分抽象方法,子类还是一个抽象类

      如果抽象中,没有抽象方法,子类继承后,可以不重写

      代码演示:

             

      演示结果:

            

    11.员工与经理案例

       代码演示:

              

              

               

               

      演示结果:

            

    12.修饰符的冲突问题:

      abstract 不能和哪些修饰符一起使用

      final    抽象目的,子类重写,final不能重写

      private  抽象目的,子类重写,但是子类不知道父类有这个方法

      static   静态方法类名直接调用,如果是抽象没有方法体,怎么调用  

    13.接口概述

       同一种事物中,猫狗,最基本的功能,定义在动物抽象类

      但是有写狗和猫具备其他功能,不是所有的猫狗都具备

      写在动物类不合适,例如跳高,钻火圈,某写狗才具备,狗的一个扩展功能

      扩展功能,使用接口来实现

      当一个类中的方法,全部是抽象方法的时候,这个类换一个名字,叫做接口

      先期,接口理解为一个特殊的抽象类

    14.接口的定义

       接口定义的关键字不是class 是interface 接口名

    Interface Demo{}

    接口中的成员,成员变量,成员方法

    成员变量的固定格式:public static final 数据类型 变量名

    成员方法固定格式:public abstract 返回值类型 方法名(参数列表)

  • 相关阅读:
    Java技术体系
    博客开篇
    在Web api2 中传递复杂参数的一点心得
    java内存区域
    nginx负载均衡配置
    nginx反向代理配置
    nginx部署静态网站
    nginx在Centos7.5下源码安装和配置
    Java中的类 serialVersionUID 在序列化的时候有什么用?
    linux开放防火墙端口
  • 原文地址:https://www.cnblogs.com/liman/p/4361339.html
Copyright © 2020-2023  润新知