【从零开始学习JAVA | 第十九篇】初识内部类

前言:

内部类是类的五大成员。一个类的其他的成员分别是属性,方法,构造方法,代码块。本文将详细介绍什么是内部类,以及内部类的意义。

内部类:

内部类(Inner Class)是 Java 中的一个特殊概念,它指的是一个类定义在另一个类内部的类。内部类可以访问外部类的成员,包括私有的成员和方法。内部类还可以访问同一个外部类中其他内部类的成员。内部类是 Java 实现面向对象的一个重要机制,常用于事件驱动编程中。

Java 中内部类的分类有以下几种:

1. 成员内部类:定义在外部类中,但是在外部类的成员方法之外。
2. 静态内部类:定义在外部类中,但是在外部类的静态方法中或者外部类的静态区域中。
3. 局部内部类:定义在外部类的方法体中或者一个作用域内。

下面是一个成员内部类的示例:


public class Outer {
    private int num = 1;
    private String name = "Outer";
    public class Inner {
        public void print() {
            System.out.println("num is " + num + ", name is " + name);
        }
    }
}

在以上代码中,定义了外部类 `Outer` 和成员内部类 `Inner`,`Inner` 类可以访问 `Outer` 类中的私有成员 `num` 和 `name`。

下面是一个示例程序,演示如何创建和使用成员内部类:

public class Test {
    public static void main(String[] args) {
        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        inner.print();
    }
}

在以上示例中,首先创建了外部类 `Outer` 的实例 `outer`,然后使用实例 `outer` 创建了内部类 `Inner` 的实例 `inner`,最后调用 `inner` 的方法 `print()` 输出结果。

总之,内部类是 Java 实现面向对象编程的重要机制,可以访问外部类的成员和方法,是实现一些事件驱动或者复杂逻辑的必要手段之一。

内部类的分类:

1.成员内部类:

成员内部类是和外部类的成员变量和方法平级的,可以访问外部类的所有变量和方法,它的定义方式如下:

public class Outer {
    private int data;
    public void method() {
        Inner inner = new Inner();
        inner.print();
    }
    class Inner {
        public void print() {
            System.out.println(data);
        }
    }
}

上面的代码定义了一个 Outer 类和一个 Inner(Nested) 类,在 Outer 类中定义了一个成员内部类 Inner,它可以访问 Outer 类中的 data 变量。

使用成员内部类的方式如下:

Outer outer = new Outer();
outer.method(); // 输出 "0"

2. 静态内部类

静态内部类是在外部类内部定义的一个静态类,它独立于外部类的对象,也就是说,即使没有创建外部类的对象,我们仍然可以使用静态内部类,静态内部类的定义方式如下:

public class Outer {
    private static int data;
    public static class Inner {
        public void print() {
            System.out.println(data);
        }
    }
}

使用静态内部类的方式如下:

Outer.Inner inner = new Outer.Inner();
inner.print(); // 输出 "0"

这里需要注意,静态内部类中只能访问外部类的静态变量或静态方法。

3. 局部内部类

局部内部类是定义在方法内部的内部类,只能在该方法内部使用,它的定义方式如下:


public class Outer {
    private int data;
    public void method() {
        class Inner {
            public void print() {
                System.out.println(data);
            }
        }
        Inner inner = new Inner();
        inner.print();
    }
}

上面的代码定义了一个局部内部类 Inner,它可以访问外部类中的 data 变量。

使用局部内部类的方式如下:


Outer outer = new Outer();
outer.method(); // 输出 "0"

4. 匿名内部类

匿名内部类是没有名字的内部类,只能一次性使用,它通常用于实现接口和抽象类的方法,它的定义方式如下:


public interface MyInterface {
    void method();
}

public class MyClass {
    public void print() {
        MyInterface myInterface = new MyInterface() {
            public void method() {
                System.out.println("Hello World");
            }
        };
        myInterface.method();
    }
}

上面的代码中,MyInterface 是一个接口,MyClass 中 print() 方法中使用了匿名内部类实现了 MyInterface 的 method() 方法。

使用匿名内部类的方式如下:

MyClass myClass = new MyClass();
myClass.print(); // 输出 "Hello World"

以上是几种常见的内部类的定义和使用方式,内部类的使用非常灵活,可以通过内部类实现许多功能,并且它具有访问外部类私有成员的能力,但是由于内部类的存在,代码的可读性和可维护性会相应降低,因此应该谨慎使用。

总结:

内部类的出现进一步扩展了类的功能,使得类的功能更加丰富,内部类的种类繁多,但我们对于这一块只要求掌握就可以了,不必做过深的研究。

如果我的内容对你有帮助,请点赞,评论,收藏创作不易,大家的支持就是我坚持下去的动力!

猜你喜欢

转载自blog.csdn.net/fckbb/article/details/131367140