嵌套类分为两类,即静态类非静态类。声明为静态的嵌套类称为静态嵌套类。非静态嵌套类称为内部类。
在 Java 中,类可以是静态的,也可以是非静态的。因此,使类成为静态类或非静态类之间存在很大差异。Java中有两种类,一种称为顶级类,另一种称为嵌套类。顾名思义,顶级类是在“.java”文件中声明的类。
另一方面,嵌套类在另一个类中声明。包含嵌套类的类称为外部类。在 Java 编程语言中,您不能使顶级类成为静态的。只能使嵌套类为静态或非静态。如果使嵌套类为非静态,则也称为内部类。

用户案例:

  • 静态嵌套类
  • 非静态嵌套类

示例1: 静态嵌套类

// Java Program to illustrate
// static nested class

// Importing input output classes
import java.io.*;
// Importing all classes from
// java.util package
import java.util.*;

// Class 1
// Helper class1
class ClassA {

    // Static variable
    static int x = 10;

    int y = 20;

    private static int z = 30;

    static class ClassB {

        void get()
        {
            System.out.println("x: " + x);
            System.out.println("z: " + z);
        }
    }
}

// Main Class
class YiibaiDemo {

    public static void main(String[] args)
    {
        ClassA.ClassB ob1 = new ClassA.ClassB();
        ob1.get();
    }
}

运行结果:

x: 10
z: 30

示例 2:非静态嵌套类

// Importing all input output classes
import java.io.*;

// Class 1
// Helper Class 1
class ClassA {

    // Static member variable of ClassA
    static int x = 10;

    int y = 20;
    public int z = 30;

    // Class 2 - Helper Class 2
    // Non-static nested class
    class ClassB {

        // Method of Non-static nested class
        void get()
        {
            // Execution command of get() method

            // Print and display commands
            System.out.println("x: " + x);
            System.out.println("y: " + y);
            System.out.println("z: " + z);
        }
    }
}

// Class 3
// Main Class
class YiibaiDemo {

    // Main driver method
    public static void main(String[] args)
    {
        // Creating object of Class 1 in main() method
        ClassA ob1 = new ClassA();

        // Creating object of non-static nested class in
        // main()
        ClassA.ClassB ob2 = ob1.new ClassB();

        // Calling non-static nested class method
        // in main() method
        ob2.get();
    }
}

运行结果:

x: 10
y: 20
z: 30

Java 中静态和非静态嵌套类之间的区别:

  • 静态内部类可以直接访问外部类的静态成员。但是,要访问外部类的实例成员,需要实例化外部类。
  • 嵌套静态类不需要外部类的引用,但非静态嵌套类或内部类需要外部类引用。
  • 非静态嵌套类对嵌套它的类的成员具有完全访问权限。静态嵌套类没有对嵌套实例的引用,因此静态嵌套类不能调用非静态方法或访问它嵌套的类实例的非静态字段。
  • 静态和非静态嵌套类之间的另一个区别是,不能直接访问非静态成员,例如方法和字段到嵌套静态类中。如果这样做,则会收到诸如“非静态成员不能在静态上下文中使用”之类的错误。而内部类可以访问外部类的静态和非静态成员。

Java中静态和非静态嵌套类的区别

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Java中静态和非静态嵌套类的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-static-and-non-static-nested-class-in-java.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。