黑马程序员——多态、内部类

来源:互联网 发布:windows域的作用 编辑:程序博客网 时间:2024/06/06 03:57
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

  1. 多态

    定义:某一类事物的多种存在形态。

    例:动物中猫,狗。

    猫这个对象对应的类型是猫类型

    x=new 猫();

    同时猫也是动物中的一种,也可以把猫称为动物。

    动物 y=new 猫();

    动物是猫和狗具体事物中抽取出来的父类型。父类型引用指向了子类对象。

     

    简而言之,就是一个对象对应着不同类型。

     

    多态的表现方式:父类或接口的引用指向其子类的对象。

     

    多态的好处:

           提高代码的扩展性,前期定义的代码可以使用后期的内容。

          

    多态的弊端:前期定义的窝内不能使用后期子类的特有内容。

     

    多态的前提:1,必须有关系,继承,实现。

                         2,要有覆盖。

     

    上转型对象:用子类构造,父类引用。向上转型,将子类的特有功能隐藏。就不用使用子类的特有方法。

    下转型对象:对子类对父类对象进行强制转换。

     

    注意:对于转型,自始至终都是子类对象在做着类型的变化。

     

    多态的类型判断:instanceof关键字用于判断对象的具体类型。只能用于引用数据类型判断。

    格式:父类对象 instanceof 子类类型或接口。

    此关键字通常用在向下转型前对父类引用的子类进行判断,以增强程序的健壮性。

     

    多态时,成员的特点:

  1. 成员变量。

    编译时:参考引用型变量所属的类中是否有调用的成员变量,有,编译通过,没有,编译失败。

    运行时结果:参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。

    简单说:编译和运行都参考引用变量所属类。也就是参考父类的成员变量。编译和运行都看左边。

  2. 成员函数。

    编译时:参考引用型变量所属的类中是否有调用的成员函数。有,编译通过,没有,编译失败。

    运行时结果:参考的是对象所属的类中是否有调用的函数。

    简单说:编译看左边,运行看右边。

  3. 静态函数。

    编译时:参考引用型函数中所属的类中是否有调用的静态方法,有,编译通过,没有,编译失败。

    运行时结果:参考引用型函数中所属的类中是否有调用的静态方法。

    简单说:编译和运行都看左边。

    多态针对于对象,而静态函数是绑定类。其实对于静态方法,是不需要对象的,直接用类名调用

    总结:成员变量和静态函数都参考父类引用所属的类的变量或方法。

     

  1. 内部类

    将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。

     

    访问特点:

  1. 内部类可以直接访问外部类中的成员,包括私有成员。

  2. 而外部类要访问内部类中的成员必须要建立内部类的对象。

     

    一般用于类的设计。

    分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容。

     

    在其它类中调用内部类的格式:Outer . Innter in=new Outer(). new Inner();

     

    如果内部类是静态的。相当于外部类,直接用类名调用。

    格式:Outer . Inter in=new Outer . Inter();

     

    如果内部中定义了静态成员,该内部类也必须是静态的。

     

    内部类访问外部类的成员变量格式:Outer.this.num

     

    为什么内部类能直接访问外部类中成员呢?

    因为内部类持有了外部类的引用。外部名.this

     

    从内部类中访问局部变量,需要被声明为final类型。内部类在局部位置上只能访问局部中被final修饰的局部变量。

    如图:

    匿名内部类必须有前提:内部类必须继承或者实现一个类或者接口。

    匿名内部类:其实就是一个匿名子类对象。

     

    格式:new 父类or接口{子类内容};

    通常的使用场景之一:

    当函数参数是接口类型时,而且接口中的方法不超过三个。可以用匿名内部类作为实际参数进行传递。

     

    当匿名内部类这个子类对象被向上转型为Object类型,就不能再使用子类特有的方法。

    如图:

     

     

  1. 面向对象回顾

    面向对象的特征有:封装,继承,多态。

    封装:把变量和函数封装在类中,这样做的好处是提高了变量的安全性,方法的复用性,调用的易用性。

    封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

     

    继承:扩展了类的功能,并且提高了代码的复用性。

     

    多态:提高了程序的扩展性,为之后的维护提供了便利。

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0
原创粉丝点击