zoukankan      html  css  js  c++  java
  • 第11章 类的高级特性--内部类

    在类中再定义一个类,则将在类中再定义的那个类称为内部类;

    内部类可分为成员内部类、局部内部类、匿名类

    1、成员内部类

    在内部类中可以随意使用外部类的成员方法以及成员变量,尽管这些类成员被修饰为private;

    但内部类的成员只有在内部类的范围之内是可知的,不能被外部类使用

    内部类的对象实例化操作必须在外部类

    使用this关键字获取内部类与外部类的引用

    public class TheSameName{
        private int x;
        private class Inner{
            private int x=9;
            public void doit(int_x){
                x++;  //调用的是形参x
                this.x++;   //调用内部类的变量x
                TheSameName.this.x++;    //调用外部类的变量x
            }
       }
    }

    2、局部内部类

    interface OutInterface2{
    }
    class OuterClass3{
        public OutInterface2  doit(final String x){
            class InnerClass2 implements OutInterface2{
                InnerClass2(String s){
                    s=x;
                    System.out.println(s);
                }
            }
            return new InnerClass2("doit");
        }
    }

    内部类被定义在了doit()方法内部,内部类InnerClass2是doit()方法的一部分,并非OuterClass3类中的一部分,所以在doit()方法的外部不能访问该内部类,但是该内部类可以访问当前代码快的常量以及外部类的所有成员。

    3、匿名内部类

    匿名类的所有实现代码都需要在大括号之间进行编写

    return new A(){
        ...//内部类体
    };

    匿名内部类没有名称,实质上这种内部类的作用就是创建一个实现于OutInterface2接口的匿名类的对象:

    class OuterClass4{
        public OutInterface2 doit(){
            return new OutInterface2(){
                private int i=0;
                public int getValue(){
                    return i;
                }
            };  //这个分号并不是代表定义内部类结束的标识,而是代表创建OuterInterface2引用表达式的标识
        }
    }

    4、静态内部类

    在内部类前添加修饰符static,这个内部类就变成静态内部类了;

    一个静态内部类中可以声明static成员,但是在非静态内部类中不可以声明静态成员;

    静态内部类不可以使用外部类的非静态成员;

    5、内部类的继承

    public class OutputInnerClass extends ClassA.ClassB{ //继承内部类ClassB
        public OutputInnerClass(ClassA a){
            a.super();
        }
    }
    class ClassA{
        class ClassB{
        }
    }

    在某个类继承内部类时,必须硬性给予这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的引用,同时在构造方法中使用a.super()语句,这样才能为继承提供了必要的对象引用。

  • 相关阅读:
    MKMapVIew学习系列2 在地图上绘制出你运行的轨迹
    WPF SDK研究 Intro(6) WordGame1
    WPF SDK研究 Intro(3) QuickStart3
    WPF SDK研究 Layout(1) Grid
    WPF SDK研究 目录 前言
    WPF SDK研究 Intro(7) WordGame2
    WPF SDK研究 Layout(2) GridComplex
    对vs2005创建的WPF模板分析
    WPF SDK研究 Intro(4) QuickStart4
    《Programming WPF》翻译 第6章 资源
  • 原文地址:https://www.cnblogs.com/chamie/p/4700538.html
Copyright © 2011-2022 走看看