Inheritance Understand with inner class and inner static class
__________________1 I am static A I am static B I am static C I am static F I am {} A I am parameterised constructor A I am {} B I am constructor B I am {} C __________________2 I am function A __________________3 30 __________________4 I am {} A I am parameterised A __________________5 10 __________________6 20 __________________7 50 __________________8 I am {} A I am parameterised constructor A I am {} B I am constructor B I am {} C __________________9 __________________10 I am function C.D __________________11 I am {} A I am parameterised constructor A I am {} B I am constructor B __________________12 60 __________________13
class A { int i = 10; static { System.out.println("I am static A"); } { System.out.println("I am {} A"); } public A() { System.out.println("I am parameterised A"); } public A(int i) { this.i = i + 20; System.out.println("I am parameterised constructor A"); } void function() { System.out.println("I am function A"); } } class B extends A { static int i = 10; static { System.out.println("I am static B"); } { System.out.println("I am {} B"); } public B() { super(i); System.out.println("I am constructor B"); } } class C extends B{ static class D { static int i=50; } class E { B b=new B(); } static { System.out.println("I am static C"); } { System.out.println("I am {} C"); } C(){ i = i + 10; } } class F extends C{ class H extends D { void function() { System.out.println("I am function C.D"); } } class G extends E { int i = 60; public G(){ super(); } } static { System.out.println("I am static F"); } } public class Source{ public static void main(String[] args) { System.out.println("__________________1"); A a = new F(); System.out.println("__________________2"); a.function(); System.out.println("__________________3"); System.out.println(a.i); System.out.println("__________________4"); a=new A(); System.out.println("__________________5"); System.out.println(a.i); System.out.println("__________________6"); System.out.println(B.i); System.out.println("__________________7"); System.out.println(C.D.i); System.out.println("__________________8"); F f=new F(); System.out.println("__________________9"); F.H b=f.new H(); System.out.println("__________________10"); b.function(); System.out.println("__________________11"); F.G c=f.new G();//this is inner non static class call System.out.println("__________________12"); System.out.println(c.i); System.out.println("__________________13"); } }
__________________1 I am static A I am static B I am static C I am static F I am {} A I am parameterised constructor A I am {} B I am constructor B I am {} C __________________2 I am function A __________________3 30 __________________4 I am {} A I am parameterised A __________________5 10 __________________6 20 __________________7 50 __________________8 I am {} A I am parameterised constructor A I am {} B I am constructor B I am {} C __________________9 __________________10 I am function C.D __________________11 I am {} A I am parameterised constructor A I am {} B I am constructor B __________________12 60 __________________13 Sequence is ---> static block -->simple block ---> class A { int i = 10; static { System.out.println("I am static A"); } { System.out.println("I am {} A"); } public A() { System.out.println("I am parameterised A"); } public A(int i) { //Constructor incrementing static variable or simple variable this.i = i + 20; System.out.println("I am parameterised constructor A"); } void function() { System.out.println("I am function A"); } int a; //initialized to zero static int b; //initialized to zero only when class is loaded not for each object created. A(String x,String y){ //Constructor incrementing static variable b b++; } public void showData(){ System.out.println("Value of a = "+a); System.out.println("Value of b = "+b); } } class B extends A { static int i = 10; static { System.out.println("I am static B"); } { System.out.println("I am {} B"); } public B() { super(i); System.out.println("I am constructor B"); } } class C extends B{ static class D { static int i=50; } class E { B b=new B(); } static { System.out.println("I am static C"); } { System.out.println("I am {} C"); } C(){ i = i + 10; } } class F extends C{ class H extends D { void function() { System.out.println("I am function C.D"); } } class G extends E { int i = 60; public G(){ super(); } } static { System.out.println("I am static F"); } } public class Source{ public static void main(String[] args) { System.out.println("__________________1"); //this will print first static block and next with out static block from A to F A a = new F(); System.out.println("__________________2"); a.function(); System.out.println("__________________3"); System.out.println(a.i); System.out.println("__________________4"); a=new A(); System.out.println("__________________5"); System.out.println(a.i); System.out.println("__________________6"); System.out.println(B.i); System.out.println("__________________7"); System.out.println(C.D.i); System.out.println("__________________8"); F f=new F(); System.out.println("__________________9"); //this is inner non static class call F.H b=f.new H(); System.out.println("__________________10"); b.function(); System.out.println("__________________11"); //this is inner non static class call F.G c=f.new G(); System.out.println("__________________12"); System.out.println(c.i); System.out.println("__________________13"); // static inner class declaration C.D innerTwo=new C.D(); System.out.println(innerTwo.i); // this is inner super class with parameterised argument pass B b1=new B(); C c1=new C(b1); System.out.println(c1.a.i); } }
Other Links: Inheritance Understand Part 1 Inheritance Understand Part 2 Inheritance Understand Part 3 Inheritance Understand Part 4 GENERATING KEYSTORE FILES