Bra*_*lor 548
根据定义,内部类不能是静态的,所以我要将你的问题改写为"静态和非静态嵌套类之间有什么区别?"
非静态嵌套类具有对其嵌套的类的成员的完全访问权.静态嵌套类没有对嵌套实例的引用,因此静态嵌套类不能调用非静态方法或访问嵌套它的类实例的非静态字段.
Ste*_*eod 125
让我们看看这些问题的智慧来源:Joshua Bloch的Effective Java:
从技术上讲,没有静态的内部类.根据Effective Java,正确的术语是静态嵌套类.非静态嵌套类确实是一个内部类,以及匿名类和本地类.
现在引用:
非静态[嵌套]类的每个实例都与其包含类的封闭实例隐式关联...可以在封闭实例上调用方法.
静态嵌套类无权访问封闭实例.它也使用更少的空间.
小智 64
静态内部类和非静态内部类之间存在两个差异.
在声明成员字段和方法的情况下,非静态内部类不能具有静态字段和方法.但是,在静态内部类的情况下,可以有静态和非静态字段和方法.
非静态内部类的实例是使用外部类的对象的引用创建的,在其中定义了它,这意味着它具有封闭实例.但是静态内部类的实例是在没有外部类引用的情况下创建的,这意味着它没有封闭实例.
看这个例子
class A
{
class B
{
// static int x; not allowed here
}
static class C
{
static int x; // allowed here
}
}
class Test
{
public static void main(String… str)
{
A a = new A();
// Non-Static Inner Class
// Requires enclosing instance
A.B obj1 = a.new B();
// Static Inner Class
// No need for reference of object to the outer class
A.C obj2 = new A.C();
}
}
Run Code Online (Sandbox Code Playgroud)
abi*_*rai 15
静态内部类不能访问封闭类的非静态成员.它可以直接访问封闭类的静态成员(实例字段和方法),就像获取值的过程样式而不创建对象一样.
静态内部类可以声明静态和非静态成员.静态方法可以访问主类的静态成员.但是,它无法访问非静态内部类成员.要访问非静态内部类的成员,必须创建非静态内部类的对象.
非静态内部类不能声明静态字段和静态方法.它必须以静态或顶级类型声明.这样做会出现这样的错误:"静态字段只能在静态或顶级类型中声明".
非静态内部类可以在获取值的过程风格中访问封闭类的静态和非静态成员,但它不能访问静态内部类的成员.
封闭类在创建内部类的对象之前无法访问内部类的成员.IF主类在访问非静态类的成员时可以创建非静态内部类的对象.
如果主类在访问静态内部类的成员时有两种情况:
Dig*_*oss 10
讨论嵌套类......
不同之处在于,静态的嵌套类声明可以在封闭类之外实例化.
如果您有一个非静态的嵌套类声明,Java将不允许您实例化它,除非通过封闭类.从内部类创建的对象链接到从外部类创建的对象,因此内部类可以引用外部的字段.
但是如果它是静态的,那么链接就不存在了,外部字段不能被访问(除了通过像任何其他对象那样的普通引用),因此你可以自己实例化嵌套类.
| 归档时间: |
|
| 查看次数: |
269794 次 |
| 最近记录: |