📜  Java嵌套和内部类(1)

📅  最后修改于: 2023-12-03 15:02:04.504000             🧑  作者: Mango

Java嵌套和内部类

Java嵌套和内部类是面向对象编程中重要的概念。Java中嵌套类指的是一个类中包含了另一个类,而内部类则是嵌套类的一种形式。在本文中,我们将介绍Java嵌套和内部类的概念、类型、用途及使用方法。同时,提供了相应的代码片段和说明,帮助程序员更好地理解和掌握这一知识点。

嵌套类
概念

Java中的嵌套类指的是一个类中包含另一个类。这种嵌套类不依赖于外部类的实例,它被看作是外部类的一个静态成员,因此也被称作静态内部类(static inner class)。

类型

在Java中,嵌套类可以分为以下两种类型:

  1. 静态嵌套类:也就是在外部类中使用static关键字修饰的嵌套类,它的实例化并不依赖于外部类。下面是一个静态嵌套类的例子:

    public class OuterClass {
        private static int x = 10;
        static class InnerClass {
            public void display() {
                System.out.println("x = " + x);
            }
        }
        public static void main(String args[]) {
            OuterClass.InnerClass inner = new OuterClass.InnerClass();
            inner.display();
        }
    }
    
  2. 非静态嵌套类:也被称为成员内部类,它是外部类的一个成员,可以访问外部类的所有成员(包括私有成员),但是它的实例必须依赖于外部类的实例才能被创建。下面是一个非静态嵌套类的例子:

    public class OuterClass {
        private int x = 10;
        class InnerClass {
            public void display() {
                System.out.println("x = " + x);
            }
        }
        public static void main(String args[]) {
            OuterClass outer = new OuterClass();
            OuterClass.InnerClass inner = outer.new InnerClass();
            inner.display();
        }
    }
    
用途

嵌套类通常被用来实现简单的工厂模式或者访问外部类的私有成员,这一点在实际开发中非常实用。

内部类
概念

内部类是Java中特有的概念,指的是在一个类的内部定义的另一个类。相对于嵌套类,内部类更加灵活,因为它具有更多的访问外部类的方式。内部类也被称作成员内部类(member inner class)。

类型

在Java中,内部类可以分为以下四种类型:

  1. 成员内部类:前面已经有了介绍,它是外部类的一个成员,可以访问外部类的所有成员。

  2. 局部内部类:它是定义在方法体内的内部类,与局部变量类似,局部内部类不能被public、private、protected和static修饰,但是它可以访问方法的所有局部变量(final变量也可)。下面是一个局部内部类的例子:

    public class OuterClass {
        void display() {
            final int i = 10;
            class InnerClass {
                void display() {
                    System.out.println("i = " + i);
                }
            }
            InnerClass inner = new InnerClass();
            inner.display();
        }
        public static void main(String args[]) {
            OuterClass outer = new OuterClass();
            outer.display();
        }
    }
    
  3. 匿名内部类:就是没有名字的内部类,通常用于创建实现某个接口或者继承某个类的匿名对象。下面是一个匿名内部类的例子:

    public class OuterClass {
        interface Hello {
            void sayHello();
        }
        public static void main(String args[]) {
            Hello hello = new Hello() {
                @Override
                public void sayHello() {
                    System.out.println("Hello World!");
                }
            };
            hello.sayHello();
        }
    }
    
  4. 静态内部类:前面也已经有了介绍,它是在外部类中使用static关键字修饰的内部类,它的实例化并不依赖于外部类。

用途

内部类可以帮助我们解决一些设计问题,它使得Java更加灵活、简洁。在实际开发中,内部类被广泛应用于事件处理、匿名类以及GUI开发等方面。

总结

Java嵌套和内部类是面向对象编程中重要的概念。嵌套类指的是一个类中包含另一个类,分为静态嵌套类和非静态嵌套类两种类型;内部类指的是在一个类的内部定义的另一个类,分为成员内部类、局部内部类、匿名内部类和静态内部类四种类型。嵌套和内部类在实际开发中具有很大的用途和意义,它们可以帮助我们更好地组织程序和解决一些设计问题。