`

内部类使用实例

阅读更多
内部类包括:成员内部类(和成员变量一样)、局部内部类(方法内部定义的类)、静态内部类(调用时需要指定外部类的名称)、匿名内部类(return new 接口名称{public 接口中定义的方法实现})
成员内部类
作为外部类的成员存在,与外部类的属性和方法并存。
成员内部类注意事项:
1)成员内部类是依赖于外部类对象而创建的
2)成员内部类中不能定义静态成员
3)成员内部类可以访问外部类所有成员,包括外部类的方法
4)成员内部类访问自己定义的变量,直接使用变量名
5)成员内部类访问自己定义的变量可以使用this.变量名
6)成员内部类访问外部类与内部类同名的变量,使用外部类.this.变量名
7)如果内部类中没有与外部类同名的变量,可以直接使用外部类的变量的名进行访问
8)外部类的非静态方法访问内部类直接使用
Inner inner = new Inner();
inner.method();
9)外部类的静态方法访问内部类与在外部类外部访问成员内部类一样,使用
Outer out = new Outer();
Inner inner = out.new Inner();
inner.method();

实例
publicclass Outer {
       private static int i = 1;
       private int j = 10;
       private int k = 20;

       Public static void outer_f1() {
       }

       Public voido uter_f2() {
       }
   
       class Inner {
              //定义一个与外部类同名的变量
              int j  = 100;
              int inner_i = 1;
              void method() {
                     //直接使用外部类变量
                     System.out.println(i);
                     //直接使用内部类变量
                     System.out.println(j);
                     //使用this.便令名访问内部变量
                     System.out.println(this.j);
                     //使用 外部类.this.变量名 访问外部同名变量
                     System.out.println(Outer.this.j);
                     //直接调用外部类的方法  
                     System.out.println(k);
                                          outer_f1();
                                          outer_f2();
              }
       }
       //外部类的非静态方法访问成员内部类,直接实例话
       publicvoidouter_f3() {
              Inner inner = new Inner();
              inner.inner_f1();
       }
       // 外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样,需要通过外部类对象创建内部类
       publicstaticvoidouter_f4() {
              Outer out = new Outer();
              Inner inner = out.new Inner();
              inner.inner_f1();
       }
       publicstaticvoid main(String[] args) {
              //在外部类的外部使用成员内部类,需要使用外部类的对象         
              Outer out = new Outer();
              Outer.Inner outin = out.new Inner();
              outin.inner_f1();
       }
}

局部内部类
局部内部类是在外部的方法中定义的内部类
局部内部类与局部变量类似,不能有访问修饰符
局部内部类可以访问当前代码块的常量和所有外部成员
注意事项:
1)局部内部类中不可以定义静态变量
2)如果局部内部类中没有与外部类同名的变量,可以直接访问访问外部类的变量名
3)可以访问局部内部类所在的方法的final变量。
4)访问局部内部类中与外部类同名的外部变量使用 外部类名.this.变量名
5)在方法中定义完局部内部类后要使用new Inner(),否则局部内部类定义的就没有意义了
6)在外部类的外部调用局部内部类,通过
Outer out = new Outer();
out.method(3);

实例
publicclass Outer {
       privateints = 100;
       privateintout_i = 1;
       publicvoid f(finalint k) {
              finalint s = 200;
              int i = 1;
              finalint j = 10;
             
              //定义在方法内部
              class Inner {
                     //定义与外部类同名的变量
                     ints = 300;
                    
                     Inner(int k) {
                            inner_f(k);
                     }
                     intinner_i = 100;
                     void inner_f(int k) {
                            //直接访问内同名的外部变量
                            System.out.println(out_i);
                            //访问final的局部成员变量
                            System.out.println(j);
                            //System.out.println(i);
                            //is.变量名访问的也是内部类变量
                            System.out.println(this.s);
                            //类名.this.内部类变量名访问的是外部类变量
                            System.out.priln(Outer.this.s);
                     }
              }
              new Inner(k);
       }
       publicstaticvoid main(String[] args) {
              // 访问局部内部类必须先有外部类对象
              Outer out = new Outer();
              out.f(3);
       }
}
静态内部类(嵌套类)
静态内部类就是将成员内部类声明外static
注意事项:
1)静态内部类的实例化不依赖于外部类的对象
2)静态内部类不能访问外部类的非静态成员变量
3)静态内部类可以定义静态或是非静态的成员变量
4)静态内部可以使用public,protected,private修饰
5)外部类内部访问静态内部类的静态成员变量和静态方法使用
6)在外部类外部生成静态内部类使用
Outer.Inner in = new Outer.Inner();


Inner.field
Inner.method

6)外部类访问静态内部类的非静态变量或是方法,需要实例化静态内部类后再调用
Inner inner = new Inner();
inner.field
inner.method

实例:
publicclass Outer {
       privatestaticinti = 1;
       privateintj = 10;
       public tatic vid uter_f1() {
       }
       publicvoidouter_f2() {
       }
       staticclass Inner {
              staticintinner_i = 100;
              intinner_j = 200;
              staticvoidinner_f1() {
                      //静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)
                     System.out.println("Outer.i" + i);
                     outer_f1();
              }
              voidinner_f2() {
                     // 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
                     // System.out.println("Outer.i"+j);
                     // outer_f2();
              }
       }
       publicvoidouter_f3() {
              // 外部类访问内部类的静态成员:内部类.静态成员
              System.out.println(Inner.inner_i);
              Inner.inner_f1();
              // 外部类访问内部类的非静态成员:实例化内部类即可
              Inner inner = new Inner();
              inner.inner_f2();
       }
       publicstaticvoid main(String[] args) {
              newOuter().outer_f3(); 
               Outer.Inner in = new Outer.Inner();    
  }
}
匿名内部类
实例
public class Parcel6 {
        public Contents cont() {
                return new Contents() {
                     private int i = 11;
                     public int value() {
                            return i;
                     }
              };
// 在这里需要一个分号
        }
        public static void main(String[] args) {
                Parcel6 p = new Parcel6();
                Contents c = p.cont();        }
}

内部类若是要引用局部变量,则局部变量必须是final的。,
在静态方法中不能直接创建内部类对象
分享到:
评论

相关推荐

    Java中内部类的实例化

    Java 内部类 实例化 在Outer类的静态方法中实例化内部类 在同一个包的其它类中实例化Outer类中的内部类

    java 内部类 局部内部类 匿名类 实例代码

    本篇文章将深入探讨Java中的四种内部类:实例内部类、局部内部类、匿名类和静态内部类,并通过实例代码进行详细解析。 1. **实例内部类**:这是最常见的内部类形式,它在外部类的实例方法或成员位置定义。实例内部...

    java 内部类的实例详解

    下面我们将深入探讨内部类的使用方法和优势。 首先,让我们理解内部类为何存在。内部类的一个主要原因是它们提供了多重继承的变通方案。虽然Java不支持类的多重继承,但内部类可以实现这一目标,因为每个内部类都...

    java内部类总结(含概念和实例)

    4. 匿名内部类:匿名内部类是指没有名字的内部类,通常用在创建实例时使用。 为什么需要内部类? 内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是,每个内部类都能独立地继承自一个(接口的)...

    java内部类使用例子

    这种内部类可以是成员内部类、局部内部类、匿名内部类或静态内部类,每种都有其特定的用途和使用场景。在这个"java内部类使用例子"中,我们将深入探讨这些类型,并通过实际代码来理解它们的工作原理。 首先,成员...

    如何实例内部类

    如何实例内部类,这是一个简单的实现实例内部类的小代码

    深入理解内部类具体实例

    // 在方法内部实例化局部内部类 li.display(); } } Outer outer = new Outer(); outer.method(); ``` 3. **匿名内部类**: 匿名内部类没有名字,通常用于创建一次性的简单类实例,尤其是在实现接口或继承类...

    java 内部类使用(内部匿名类)

    创建匿名内部类的方式是在实例化类时直接定义类的实现,不需要声明类名。 3. **方法参数内部类**:这是一种特殊类型的局部内部类,可以在方法签名中声明一个新的类。这种内部类的生命周期仅限于该方法的执行,可以...

    java 静态内部类的使用规范

    - 匿名内部类不能是静态的,它总是在使用时被实例化,并且通常用于实现接口或继承一个类。 - 静态内部类则可以独立存在,无需匿名。 **6. 编译后的文件结构** - Java编译器会为静态内部类生成独立的`.class`文件,...

    Java创建内部类对象实例详解

    这里的`outer.new Inner()`表示我们使用`outer`这个外部类的实例来创建`Inner`内部类的一个实例。由于内部类可以访问外部类的私有成员,因此这种方式使得内部类可以与外部类紧密协作。 对于静态内部类,由于它们不...

    内部类分类及应用

    在使用匿名内部类时,要记住以下几个原则:匿名内部类不能有构造方法、匿名内部类不能是public、protected、private、static、只能创建匿名内部类的一个实例、匿名内部类不能定义任何静态成员、静态方法、一个匿名...

    内部类 匿名内部类 内部接口 对比说明

    本文将详细探讨内部类、匿名内部类以及内部接口的对比和使用。 首先,让我们了解一下内部类的基本概念。内部类定义在其他类的内部,编译后会生成两个独立的类文件。内部类能够自由地访问外部类的所有成员,包括私有...

    JAVA 内部类 PPT

    - **静态内部类**:静态内部类与实例内部类的区别在于,静态内部类不依赖于外部类的实例,可以直接通过类名创建对象。它可以直接访问外部类的静态成员,但访问实例成员需通过外部类的实例。 - **局部内部类**:...

    java内部类使用总结

    - **实例内部类**:没有使用`static`修饰的内部类,与外部类的对象绑定,每个外部类的对象可以有多个实例内部类的对象。创建实例内部类对象需要先创建外部类对象,并通过外部类对象来实例化内部类。 - **静态内部...

    java内部类详解

    - 静态内部类和成员内部类在内存管理上有差异,静态内部类不会引起外部类的实例化,而成员内部类会。 - 匿名内部类不能包含任何静态声明,因为它们没有名称。 总的来说,Java 内部类是强大且灵活的工具,有助于构建...

    内部类的使用

    匿名内部类是无名的,通常用于创建一次性使用的简洁实现,比如作为接口的实例。静态内部类则与普通的静态成员类似,不依赖于外部类的实例,可以独立存在。 内部类的一个重要应用场景是在事件处理中,例如Swing或...

    浅谈内部类与静态内部类的应用

    但需要注意的是,由于这种紧密耦合,内部类实例不能独立于外部类实例存在,也就是说,必须先创建外部类对象,才能创建内部类对象。 静态内部类,又称为静态嵌套类,是内部类的一种特殊形式。与普通成员内部类不同,...

    内部类的分类及各自用法

    静态内部类不依赖于外部类的实例,也就是说,我们可以不创建外部类的实例而直接创建静态内部类的实例。这种内部类的主要优势在于提高了内存利用率,并且可以使用`static`修饰符定义静态成员。 **示例代码片段**: `...

    java 成员内部类的使用规范

    4. **作用域与生命周期**:成员内部类的作用域仅限于外部类,其生命周期与外部类实例相关联,当外部类实例被销毁时,与之关联的内部类实例也会被垃圾回收。 5. **内存占用**:非静态内部类会隐含持有一个对外部类的...

    java 匿名内部类的使用规范

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不需要定义一个单独的类的情况下创建类的实例。这在处理回调、事件监听、单例模式以及其他需要短时间内定义一个简单类的情况时非常有用。本篇文章将...

Global site tag (gtag.js) - Google Analytics