📅  最后修改于: 2020-04-05 16:00:05             🧑  作者: Mango
在Java中,可以在另一个类中定义一个类,此类被称为嵌套类。它们使您能够对仅在一个地方使用的类进行逻辑分组,从而增加了封装的使用,并创建了更具可读性和可维护性的代码。
语法:
class OuterClass
{
...
class NestedClass
{
...
}
}
静态嵌套类
与类方法和变量一样,静态嵌套类与其外部类相关联。与静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们。
使用封闭的类名可以访问它们。
OuterClass.StaticNestedClass
例如,为静态嵌套类创建一个对象,请使用以下语法:
OuterClass.StaticNestedClass nestedObject =
new OuterClass.StaticNestedClass();
// Java展示从外部访问静态嵌套类
class OuterClass
{
// 静态方法
static int outer_x = 10;
// instance(non-static) member
int outer_y = 20;
// 私有成员
private static int outer_private = 30;
// 静态嵌套方法
static class StaticNestedClass
{
void display()
{
// 可从外部类访问静态成员
System.out.println("outer_x = " + outer_x);
// 展示外部类的private static成员
System.out.println("outer_private = " + outer_private);
// 如下语句会编译错误
// 因为静态嵌套类,不能直接访问费静态成员
// System.out.println("outer_y = " + outer_y);
}
}
}
// 测试代码
public class StaticNestedClassDemo
{
public static void main(String[] args)
{
// 访问静态嵌套类
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
nestedObject.display();
}
}
输出:
external_x = 10
outside_private = 30
内部类
要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象内创建内部对象:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
有两种特殊的内部类:
// Java展示访问内部类
class OuterClass
{
// static成员
static int outer_x = 10;
// instance(non-static) member
int outer_y = 20;
// private成员
private int outer_private = 30;
// inner class
class InnerClass
{
void display()
{
// 访问外部类的静态成员
System.out.println("outer_x = " + outer_x);
// 访问外部类的非静态成员
System.out.println("outer_y = " + outer_y);
// 访问外部类的静态成员
System.out.println("outer_private = " + outer_private);
}
}
}
// 测试代码
public class InnerClassDemo
{
public static void main(String[] args)
{
// 访问内部类
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
innerObject.display();
}
}
输出:
outer_x = 10
outer_y = 20
outer_private = 30
静态和内部(非静态嵌套)类之间的区别