1.内部类
您最近了解到有静态变量和静态方法。原来还有静态类。但我们将从远处来探讨这个话题。
在 Java 中,您完全可以在类中声明类。甚至类中的类中的类中的类中的类。这一切看起来都很简单:
class OuterClass
{
variables of the class
methods of the class
class NestedClass
{
variables of the class
methods of the class
}
}
我们只是在另一个类中声明一个类。就如此容易。
例子:
public class Solution
{
static ArrayList<Point> points = new ArrayList<Point>();
public static void main(String[] args)
{
Point point = new Point();
point.x = 100;
point.y = 200;
points.add(point);
}
static class Point
{
int x;
int y;
}
}
嵌套类可以是静态的或非静态的。静态嵌套类简称静态嵌套类。非静态嵌套类称为内部类(inner classes)。
2.静态类
静态嵌套类可以在其外部类之外使用。如果这样的类具有 public 访问修饰符,那么它可以在程序的任何地方使用。这样的类与任何普通类几乎没有区别。但是有一些不同之处。
班级名称
如果要从外部类以外的地方引用静态嵌套类,则需要指定类名,它由外部类的名称和嵌套类的名称组成。这是这个名字的一般外观:
OuterClass.InnerClass
例子:
外层类 | 嵌套类 | 嵌套类的全名 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
如果嵌套类有自己的嵌套类,则它们的名称只需使用点连接即可。
JDK 中嵌套类的一个典型例子是Entry
class inside of Map
class。如果要获取存储在对象中的键值对集HashMap
,请使用entrySet()
方法,该方法返回一个.Set<Map.Entry>
请注意,这是外部类和嵌套类的示例。Map.Entry
创建对象
创建静态嵌套类的对象非常容易。这是它的样子:
OuterClass.NestedClass name = new OuterClass.NestedClass();
它与普通类完全相同,但名称由两部分组成。
调用静态方法
如果一个静态类有静态方法,你可以像访问普通类的静态方法一样访问它们(但是类名会由两部分组成)。
OuterClass.NestedClass.staticMethod();
访问静态变量
访问嵌套类的公共静态变量也很容易:
OuterParent.NestedClass.nameOfStaticVariable
3.静态类的特点
静态嵌套类被称为静态的理由最少。他们的行为就像普通班级一样。从非静态方法访问它们没有限制。
如果您在其外部类中使用静态嵌套类,您将不会注意到与最普通(非嵌套且非静态)类的任何区别。
例子:
静态嵌套点类 | 普通点类。 |
---|---|
|
|
如果将某个静态嵌套类从其外部类中移出,唯一会发生变化的是新类将不再能够访问private static
其先前外部类的变量和方法。
例子:
静态嵌套点类 | 普通点类。 |
---|---|
|
|
main
普通Point
类中的方法不能访问类private static
points
的变量Solution
!
这是静态嵌套类和普通类的主要区别。静态嵌套类的方法可以访问其外部类的所有静态变量和方法,即使它们是声明的private
。
如果您考虑一下,为什么会感到惊讶呢?修饰符private
明确表示此修饰符标记的变量和方法只能从其类中访问。外部类中是否有静态嵌套类?是的,所以没问题!随心所欲地访问它们。
GO TO FULL VERSION