接口:
声明在接口中的属性自动成为public static final
声明在接口中的方法自动成为public
声明在接口中的类自动成为public static
如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着:
1. 要创建嵌套类的对象,并不需要其外围类的对象。
2. 不能从嵌套类的对象中访问非静态的外围类对象。
public class Z1 {
private static int i = 1;
private int j = 10;
public static void outer_f1() {
}
public void outer_f2() {
}
// 静态内部类可以用public,protected,private修饰
// 静态内部类中可以定义静态或者非静态的成员
static class Inner {
static int inner_i = 100;
int inner_j = 200;
static void inner_f1() {
//静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)
System.out.println("Outer.i" + i);
outer_f1();
}
void inner_f2() {
// 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
// System.out.println("Outer.i"+j);
// outer_f2();
System.out.println("非静态方法");
}
}
class Innerz {
int inner_j = 200;
void inner_f2() {
// 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
// System.out.println("Outer.i"+j);
// outer_f2();
System.out.println("非静态累非静态方法");
}
}
public void outer_f3() { // 外部类访问内部类的静态成员:内部类.静态成员
System.out.println(Inner.inner_i);
Inner.inner_f1();
// 外部类访问内部类的非静态成员:实例化内部类即可
Inner inner = new Inner();
inner.inner_f2();
}
public static void main(String[] args) {
new Z1().outer_f3();
Z1.Inner z=new Z1.Inner();
z.inner_f2();
Z1 z1=new Z1();
Z1.Innerz zz=z1.new Innerz();
zz.inner_f2();
}
}
生成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in = new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类(正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则)
分享到:
相关推荐
5. **静态方法调用**:在静态内部类中可以直接访问外部类的静态方法和变量,但是无法直接访问非静态成员。 6. **非静态方法调用限制**:如果需要访问外部类的非静态方法或变量,则必须通过外部类的对象引用来进行...
非静态嵌套类可以分为三种:在一个类中直接定义的内部类、在一个方法中定义的内部类和匿名内部类。匿名内部类是指没有名字的内部类,通常用于实现某个接口或继承某个类。 四、在外部类中定义内部类 在外部类中定义...
Java语言中的静态内部类,也称为嵌套类,是内部类的一种特殊形式,它与非静态内部类(也称为成员内部类)相比有着独特的特点和使用场景。在深入探讨其使用规范之前,我们先理解静态内部类的基本概念。 静态内部类不...
- 非静态内部类则更适合那些需要紧密耦合,并且需要访问外部类非静态成员的场景。 以下是一个示例,展示了静态内部类和非静态内部类的使用: ```java class OuterClass { private static String msg = ...
* 静态内部类不能访问外部类的非静态成员 匿名内部类的特点: * 匿名内部类是指没有名字的内部类 * 匿名内部类通常用在创建实例时使用 * 匿名内部类可以访问外部类的所有成员 在 Java 中,内部类是一种非常重要的...
内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...
静态嵌套类不能访问外部类的非静态成员变量和方法,但是可以访问外部类的静态成员变量和方法。 方法内部类 方法内部类是指定义在外部类的方法中的内部类。方法内部类可以访问外部类的所有成员变量和方法,包括私有...
它们不会隐含持有外部类的引用,因此无法直接访问外部类的非静态成员。静态内部类可以看作是外部类的静态成员,与外部类的其他静态成员共享相同的命名空间。创建静态内部类的实例时,无需先创建外部类的实例,而是...
非静态内部类是指定义在另一个类的非静态成员中的类。非静态内部类可以访问外部类的成员变量和成员方法,同时也可以被外部类访问。在外部类中访问内部类可以使用内部类对象来调用内部类的成员变量和成员方法。在外部...
Java内部类主要包括以下几种类型:成员内部类(非静态内部类)、静态内部类(也称为静态嵌套类)、局部内部类和匿名内部类。 - **成员内部类**:这种类型的内部类是定义在外部类的一个成员位置上,它可以访问外部类...
2. **访问限制**:静态内部类只能访问外部类的静态成员(包括变量和方法),而不能访问外部类的非静态成员。这是因为静态内部类并不依赖于外部类的实例,因此不能访问非静态成员。 3. **命名空间**:静态内部类和...
2. **成员内部类(Instance Inner Classes)**:成员内部类是定义在一个类内部的非静态类。它们可以访问外部类的所有成员,包括私有的。一个成员内部类的实例总是与外部类的一个实例相关联,因此,你不能在没有外部...
- **实例内部类**:在类的内部定义的非静态类称为实例内部类。实例内部类的实例需要依赖于外部类的实例,即创建实例内部类对象前必须先创建外部类对象。 - **静态内部类**:静态内部类与实例内部类的区别在于,...
Java中的内部类与外部类是Java面向对象编程中一个重要的特性,它允许我们在一个类的内部定义另一个类。这种设计模式提供了更高级别的封装,并且能够实现一些特殊的功能,如匿名内部类、事件处理等。以下是对内部类与...
这意味着静态成员类并不依赖于外部类的实例化就可以独立存在,并且可以访问外部类的所有静态成员变量和静态方法,但不能直接访问外部类的非静态成员变量和方法。 **2.1 静态成员类的特性** - **访问控制**:静态...
4. **内部类访问外部类**:非静态成员内部类可以通过`this`关键字访问外部类中的成员变量和方法。如果外部类的方法中存在同名变量,则可以通过`外部类.this.变量`的方式访问外部类的成员变量。 #### 三、静态成员...
Java内部类是Java语言提供的一种独特机制,它允许在一个类的内部定义另一个类。这种设计模式使得代码结构更紧凑,可以更好地封装和隐藏实现细节,同时也增强了代码的复用性。内部类分为几种类型,包括成员内部类、...
3. 使用限制:静态内部类无法直接访问外部类的非静态成员,局部内部类和匿名内部类的作用域有限。 总结,Java内部类是一种强大的工具,能够帮助我们更好地组织代码、实现复杂的逻辑和接口。但使用时也需谨慎,避免...
与普通成员内部类不同,静态内部类不持有对外部类的引用,因此不能直接访问外部类的非静态成员。静态内部类需要通过外部类名.静态内部类名的方式来创建对象,这与访问任何其他静态成员的方式相同。这种特性使得静态...