0% found this document useful (0 votes)
45 views14 pages

Programming in Java: Nested Classes

The document discusses different types of nested classes in Java, including static nested classes, inner classes, local classes, and anonymous classes. Static nested classes cannot access non-static members of the outer class but inner classes can. Local classes are defined in a block and can access local variables declared final. Anonymous classes enable declaring and instantiating a class at the same time without a name.

Uploaded by

Lakshmi Prasanna
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views14 pages

Programming in Java: Nested Classes

The document discusses different types of nested classes in Java, including static nested classes, inner classes, local classes, and anonymous classes. Static nested classes cannot access non-static members of the outer class but inner classes can. Local classes are defined in a block and can access local variables declared final. Anonymous classes enable declaring and instantiating a class at the same time without a name.

Uploaded by

Lakshmi Prasanna
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 14

Programming in Java

Nested Classes

By
Ravi Kant Sahu
Asst. Professor, LPU
Contents
• Nested Class
• Static Nested Class
• Inner Class
• Local Class
• Anonymous Class

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
Nested Class
• The Java programming language allows us to define a
class within another class. Such a class is called a nested
class.
Example:
class OuterClass
{
...
class NestedClass
{
...
}
}
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
Types of Nested Classes
• A nested class is a member of its enclosing class.

• Nested classes are divided into two categories:


– static
– non-static

• Nested classes that are declared static are simply called


static nested classes.

• Non-static nested classes are called inner classes.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
Why Use Nested Classes?
• 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.

• 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.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
Static Nested Classes
• A static nested class is associated with its outer class similar to class
methods and variables.

• A static nested class cannot refer directly to instance variables or


methods defined in its enclosing class.

• It can use them only through an object reference.

• Static nested classes are accessed using the enclosing class name:
OuterClass.StaticNestedClass

• For example, to create an object for the static nested class, use this
syntax:
OuterClass.StaticNestedClass nestedObject =
new OuterClass.StaticNestedClass();
Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
Inner Classes
• An inner class is associated with an instance of its enclosing class
and has direct access to that object's methods and fields.

• Because an inner class is associated with an instance, it cannot


define any static members itself.

• Objects that are instances of an inner class exist within an instance


of the outer class.
• Consider the following classes:
class OuterClass {
...
class InnerClass { ... }
}
• An instance of InnerClass can exist only within an instance of
OuterClass and has direct access to the methods and fields of its
enclosing instance.

• To instantiate an inner class, we must first instantiate the outer class.


Then, create the inner object within the outer object.
• Syntax:
OuterClass.InnerClass innerObject =
outerObject.new InnerClass();

• Additionally, there are two special kinds of inner classes:


– local classes and
– anonymous classes (also called anonymous inner classes).

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
Local Classes

• Local classes are classes that are defined in a block, which is a


group of zero or more statements between balanced braces.

• For example, we can define a local class in a method body, a for


loop, or an if clause.

• A local class has access to the members of its enclosing class.

• A local class has access to local variables. However, a local class


can only access local variables that are declared final.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
Important

• A local class has access to local variables. However, a local


class can only access local variables that are declared final.

• Starting in Java SE 8, a local class can access local variables


and parameters of the enclosing block that are final or
effectively final.

• A variable or parameter whose value is never changed after it


is initialized is effectively final.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
Anonymous Classes
• Anonymous classes enable us to declare and instantiate a class
at the same time.

• They are like local classes except that they do not have a
name.

• The anonymous class expression consists of the following:


1. The new operator
2. The name of an interface to implement or a class to extend.
3. Parentheses that contain the arguments to a constructor, just like a
normal class instance creation expression.
4. A body, which is a class declaration body. More specifically, in
the body, method declarations are allowed but statements are not.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
 Anonymous classes have the same access to local variables of the enclosing
scope as local classes:
• An anonymous class has access to the members of its enclosing class.
• An anonymous class cannot access local variables in its enclosing scope that are not
declared as final.

 Anonymous classes also have the same restrictions as local classes with
respect to their members:
• We cannot declare static initializers or member interfaces in an anonymous class.
• An anonymous class can have static members provided that they are constant
variables.

 Note that we can declare the following in anonymous classes:


• Fields
• Extra methods (even if they do not implement any methods of the supertype)
• Local classes
• we cannot declare constructors in an anonymous class.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)
Note:

When we compile a nested class, two different class files will


be created with names

Outerclass.class
Outerclass$Nestedclass.class

• Local Class is named as Outerclass$1Localclass.class


• Anonymous class is named as Outerclass$1.class

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

You might also like