A nested class is a class whose definition appears inside the definition of another class, as if it were a member of the other class. The SystemVerilog programming language allows you to define a class within another class.
EXAMPLE class StringList;
class Node; // Nested class for a node in a linked list.
class Node; // Nested class for a node in a binary tree.
Node left, right;
endclass // StringList::Node is different from StringTree::Node
Nesting allows hiding of local names and local allocation of resources. This is often desirable when a new type is needed as part of the implementation of a class. Declaring types within a class helps prevent name collisions and the cluttering of the outer scope with symbols that are used only by that class. Type declarations nested inside a class scope are public and can be accessed outside the class
Why Use Nested Classes
There are several compelling reasons for using nested classes, among them:
It is a way of logically grouping classes that are only used in one place.
It increases encapsulation.
Nested classes can lead to more readable and maintainable code.
Logical grouping of classes : If a class is useful to only one other class, then it is logical to embed it in that class and keep the two together. Nesting such "helper classes" makes their package more streamlined.
Increased encapsulation : Consider two top-level classes, A and B, where B needs access to members of A that would otherwise be declared private. By hiding class B within class A, A's members can be declared private and B can access them. In addition, B itself can be hidden from the outside world.
More readable, maintainable code:Nesting small classes within top-level classes places the code closer to where it is used.