Java 如何使用外部类名调用非静态内部类
如何使用类名A调用静态类B尽管类A不是静态的这与要静态或不静态的类无关,但与方法中的static关键字相关Java 如何使用外部类名调用非静态内部类,java,Java,如何使用类名A调用静态类B尽管类A不是静态的这与要静态或不静态的类无关,但与方法中的static关键字相关 查看一下也阅读这篇文章这与类是否为静态无关,它与方法中的static关键字有关 查看一下也阅读这篇文章静态关键字用于修改类的成员。使用static修改成员时,可以使用封闭类的名称直接访问该成员,而不是像使用非静态成员那样使用封闭类的实例 下面的内部类internal是类Outer的成员: public class InnerTest { public static void ma
查看一下也阅读这篇文章这与类是否为静态无关,它与方法中的static关键字有关
查看一下也阅读这篇文章静态关键字用于修改类的成员。使用
static
修改成员时,可以使用封闭类的名称直接访问该成员,而不是像使用非静态成员那样使用封闭类的实例
下面的内部类internal
是类Outer
的成员:
public class InnerTest {
public static void main(String arg[]) {
A.B.print();
}
}
class A {
static class B {
static void print() {
System.out.println("Hello");
}
}
}
因此,内部
可以如下访问:
class Outer {
static class Inner {}
}
Outer
不需要/不能被static
修改,因为它不是类的成员。它是一个存在于全局范围内的类。要访问它,只需写下它的名称-Outer
。它是非静态的没有意义,因为它没有封闭类。如果它是非静态的,您应该如何访问它?使用static
关键字修改类的成员。使用static
修改成员时,可以使用封闭类的名称直接访问该成员,而不是像使用非静态成员那样使用封闭类的实例
下面的内部类internal
是类Outer
的成员:
public class InnerTest {
public static void main(String arg[]) {
A.B.print();
}
}
class A {
static class B {
static void print() {
System.out.println("Hello");
}
}
}
因此,内部
可以如下访问:
class Outer {
static class Inner {}
}
Outer
不需要/不能被static
修改,因为它不是类的成员。它是一个存在于全局范围内的类。要访问它,只需写下它的名称-Outer
。它是非静态的没有意义,因为它没有封闭类。如果它是非静态的,您应该如何访问它?要使用正确的术语,类B不是内部类;它是一个静态嵌套类。有关各种类型的嵌套类的定义,请参见
重要的关键字是B类定义前面的static
关键字。A类是否为静态并不重要。事实上,把静态的放在A类的定义前面是没有意义的
因为类B被声明为静态的,所以它不保留对类a实例的引用。为了使用正确的术语,类B不是一个内部类;它是一个静态嵌套类。有关各种类型的嵌套类的定义,请参见
重要的关键字是B类定义前面的static
关键字。A类是否为静态并不重要。事实上,把静态的放在A类的定义前面是没有意义的
因为类B被声明为静态的,所以它不保留对类a实例的引用。还有一个方面如何解释这一点:
类
本身不是静态的
或非静态的
它只是一个类
无论如何,您只能对class
成员使用static
关键字。如果您试图将InnerTest
声明为static
,则可能会出现如下错误(因此假设它不是某个其他类的静态嵌套类)
类InnerTest的非法修饰符;仅公开、抽象&
允许进行期末考试
static
nestedclass
可以像前面提到的那样使用,因为它不需要访问InnerTest
的任何实例成员。换句话说,它可以访问静态
成员,并且只能访问这些成员
如果它需要访问非静态
成员,那么它不能是静态的,调用的方式类似于新的InnerTest()。新的B()
如何解释这一点:
类
本身不是静态的
或非静态的
它只是一个类
无论如何,您只能对class
成员使用static
关键字。如果您试图将InnerTest
声明为static
,则可能会出现如下错误(因此假设它不是某个其他类的静态嵌套类)
类InnerTest的非法修饰符;仅公开、抽象&
允许进行期末考试
static
nestedclass
可以像前面提到的那样使用,因为它不需要访问InnerTest
的任何实例成员。换句话说,它可以访问静态
成员,并且只能访问这些成员
如果它需要访问非静态的成员,那么它就不能是静态的,调用的方式就像new InnerTest()。new B()
为什么你认为类A
应该是静态的?为什么你认为类A
应该是静态的?