Inner Classes: Neelam A
Inner Classes: Neelam A
Neelam A
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Overview
• Kinds of classes
• Inner
• Nested
• Inner classes
• Nested classes
• Local Class
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Kind of Classes
• Top level classes
• Declared inside package
• Visible throughout package, perhaps further
• Normally declared in their own file
Public classes must be defined in their own file
Not required for other classes
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Kind of Inner/Nested Classes
• Inner class
• Anonymous inner class
• Nested class
• Examples
public class MyOuterClass {
public class MyInnerClass { … }
static public class MyNestedClass { … }
Iterator iterator( ) { return new Iterator( ) { … } }
}
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Classes
• Description
• Class defined in scope of another class
• Property
• Can directly access all variables & methods of
enclosing class (including private fields & methods)
• Example
public class OuterClass {
public class InnerClass {
...
}
}
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Class
• May be named or anonymous.
• Useful for
• Logical grouping of functionality
• Data hiding
• Linkage to outer class
• More readable/maintainable code
• Examples
• Iterator for Java Collections
• Listeners for Java GUI Applications
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Classes
• Inner class instance
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Classes Example
• Code
public class OC { // outer class
private int x = 2; // don’t forget private
public class IC { // inner class
int z = 4;
public int getSum() {
return x + z;
}
}
}
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Inner Class Example
• Class referencing syntax
• OuterClass.InnerClass
• Example
OC oc = new OC();
OC.IC ic; // name of inner class
// ic = new OC.IC() doesn’t work!
ic = oc.new IC(); // instantiates inner class
// ic now will "know about" oc, but not vice versa
ic.getSum() yields 6 // can access private x in oc!
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Creating/Referring to Inner Classes
• Assume class A defines an inner class B.
• For example,
class LinkedList {
static class Node {
Object head;
Node tail;
}
Node head;
}
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Nested Classes
• A static nested class is behaviorally a top-level class that has
been nested in another top-level class for packaging
convenience.
• Still defined within outer class, has access to all the private fields
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Anonymous Inner Class
• Doesn’t name the class.
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Anonymous Inner Class
Syntax:
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.
Local Inner Class
We can declare an inner class within the body of a method.
Such a class is known as a local inner class.
www.edujini-labs.com
Copyright © 2005 – 2007, Edujini Labs Pvt. Ltd. All rights reserved.