Java-面向对象篇(补充)

1.多态性

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

        多态是由封装性和继承性引出面向对象程序设计语言的另一个特征。

        多态的体现:方法的重载和重写

     1.1 静态多态性(编译时多态):由方法重载(overload)实现

     1.2 动态多态性(运行时多态):子类对象可以作为父类对象使用,有方法重写(overridder)实现

2.对象的多态性

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

         1.向上转型:

                  父类  父类对象=子类实例;//程序自动完成

           注意使用规则:

           操作的是父类对象,所以无法访问子类新增加的成员(属性和方法)

           子类中覆盖的方法和同名的成员变量

                a.成员变量(包括静态的变量)和静态成员方法:编译和运行都看左边(看父类的)

                b.非静态的成员方法:编译看左边的,运行看右边的(子类覆盖的方法)。

         2.向下转型:

                  子类 子类对象=(子类)父类对象;//需要强制转换 

 3.内部类(等价于一个非静态的成员方法即不可声明static变量)

         在类的内部里再定义另外一个类,则这个类称为内部类。

         外部类的成员被内部类所知,而内部类的成员不被外部所知,只能实例化内部类来访问其成员

    优点:可以方便的访问外部类的私有属性(最大优点),减少编译后字节码文件的大小

    缺点:使程序结构不清晰。

3.1 成员内部类(即实例内部类)

  • 成员内部类中不能定义static变量
  • 成员内部类持有外部类的引用
  • 文件管理方面:编译后会产生“外部类名$内部类名.class”的文件
  • 外部实例化类的格式:
  •    Outer out=new Outer(); Outer.Inner  in=out.new Inner();

3.2 静态内部类(外部类)

        用static声明的内部类,称为静态内部类,相当于外部类。可以通过外部类.内部类来访问

  • 静态内部类不会持有外部类的引用。创建时可以不用创建外部类。
  • 静态内部类可以访问外部的静态变量,如果要访问外部类的成员变量必须通过实例化外部类访问
  • 外部实例化类的格式
  •        Outer.Inner   in=new Outer.Inner();

3.3 局部内部类(在方法中定义的内部类)

  • 可以访问外部类的成员,要想访问方法中局部变量必须为final类型才可以访问
  • 局部内部类不能加private ,protected,public中任一个修饰符
  • 不能包含静态成员。

3.4 匿名内部类

  • 如果一个内部类在整个操作中只使用一次的话,可以定义为匿名内部类
  • 没有名字的内部类,这是Java为了方便我们编写程序而设计的一个机制。有时候有的内部类
  • 只需要创建一个对象即可,以后再也不会用到这个类了。
  • 匿名内部类是在抽象类和接口的基础上发展起来的。它可以是继承某个类,或是实现某个接口
  • 在文件管理上:编译后会产生“外部类名$编号.class”,编号为1,2,3....n,表示第几个匿名内部类

     格式:

      new 父类或者抽象父类或者接口名()

      { 实现方法}.调用相应的方法;

posted @ 2014-12-24 16:35  beyondbycyx  阅读(155)  评论(0编辑  收藏  举报