黑马程序员  第九天笔记 

            <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 返回值类型 方法名(参数列表)

 

posted on 2015-03-23 23:18  星之钥匙  阅读(98)  评论(0编辑  收藏  举报