Pure Java – 81 Nested Class – Local Inner Class

Merhaba Arkadaslar,
Bu yazimda Local Inner Class’tan bahsedecegim. Onceki yazilarda Regular Inner Class ve Nested Interface konusunu incelemistik.

Local Inner Class
Local Inner Class’lar bir block icerisinde tanimlanir( { } ), bu tanimlama tipik olarak bir method icerisinde yapilir. Bu nedenle Method Local Inner class da denilmektedir.

  • Local Inner Class’in objesi/ornegi/instance sadece tanimlandigi (block)metot icerisinde yapilabilir. Outer sinifin diger metotlarinda ya da bir baska sinif Local Inner Class objesi olusturamaz.
  • Local Inner Class’a ait obje olusturma kodu(new) ilgili metot icerisinde Local inner class tanimindan(declaration) sonra olmalidir. Oncesinde yapilamaz , derleme hatasi verir.

 

public class OuterClass {

	public static void main(String[] args) {
		OuterClass outer = new OuterClass();
		outer.createALocalInner();
	}

	void createALocalInner() {

		// LocalInner localInner = new LocalInner();
		// derleme hatasi verir. Local Inner instance'i olusturmak icin bu kod
		// local inner class tanimindan sonra olmalidir.
		class LocalInner {

		}

		LocalInner localInner = new LocalInner();

	}
}

  • Regular Inner Class’larda oldugu gibi Local Inner Class’lar da , Outer siniflarin private uyeleri dahil tum uyelerine ulasim saglayabilir.
public class OuterClass2 {

	private String privateVar = "I am Outer variable";

	private void outerPrivateOuter() {
		System.out.println("I am Outer Method");
	}

	public static void main(String[] args) {
		OuterClass2 outer = new OuterClass2();
		outer.createALocalInner();
	}

	void createALocalInner() {

		class LocalInner {
			private void localInnerMethod() {
				System.out.println(privateVar);
				outerPrivateOuter();
			}
		}

		LocalInner localInner = new LocalInner();
		localInner.localInnerMethod();
	}
}

  • Local Inner Class’lar , sadece tanimlandigi metotta final local degiskenlere ulasabilir. final olmayan local degiskenlere ulasim saglanamaz.
public class OuterClass3 {

	public static void main(String[] args) {
		OuterClass3 outer = new OuterClass3();
		outer.createALocalInner();
	}

	void createALocalInner() {
		// String outerLocalVariable="I am outer local variable";
		final String finalOuterLocalVariable = "I am final outer local variable";
		// final local degiskenlere erisim saglanabilir.
		class LocalInner {
			private void localInnerMethod() {
				// System.out.println(outerLocalVariable);
				System.out.println(finalOuterLocalVariable);

			}
		}

		LocalInner localInner = new LocalInner();
		localInner.localInnerMethod();
	}
}

  • Non-static metot icerisinde tanimlanan local inner classlarda static metot tanimlanamaz.
  • Non-static metot icerisinde tanimlanan local inner classlarda static degisken sadece final olarak tanimlanabilir.
public class OuterClass4 {

	public static void main(String[] args) {
		OuterClass4 outer = new OuterClass4();
		outer.createALocalInner();

	}

	void createALocalInner() {

		class LocalInner {

			final static String finalStaticLocalVariable = "I am static final local variable";
			// static String staticLocalVariable="I am static local variable";
			// //derleme hatasi

			// private static void localInnerMethod() {
			// //derleme hatasi

			// }

			// private static final void localInnerMethod() {
			// //derleme hatasi
			// }
		}

		LocalInner localInner = new LocalInner();

	}
}
  • Local Inner Class’lar private, protected,public tanimlanamaz. Zaten metot icerisinde tanimli oldugu icin scope’u tanimlandigi metotla sinirlidir.
  • Local Inner Class’lar abstract veya final olabilir.
public class OuterClass5 {

	void createALocalInner() {

		abstract class AbstractLocalInner {

		}

		class SubLocalInner extends AbstractLocalInner {

		}
		
		final class FinalClass {
			
		}
		
		// class SubLocalInner2 extends FinalClass {
		//
		// }
		

	}
}
  • static metot icerisinde de local inner class tanimlayabiliriz. benzer sekilde yine sadece final static degisken tanimlayabiliriz. static metot tanimlayamayiz.
public class OuterClass6 {

	public static void main(String[] args) {

		class LocalInner {
			private String localInstanceVariable = "I am local inner variable";
			private final static String finalStaticLocalVariable = "I am static final local variable";

			// static String staticLocalVariable="I am static local variable";

			void localInnerMethod() {
				System.out.println("local inner method");
			}

			// static void staticLocalInnerMethod() {
			// System.out.println("derleme hatasi");
			// }
		}

		LocalInner localInner = new LocalInner();
		System.out.println(localInner.localInstanceVariable);
		System.out.println(localInner.finalStaticLocalVariable);
	}

}

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *