본문 바로가기
자바과정/Java

Java 기초 - 8일차

by Parkej 2021. 2. 17.

Inner 클래스 (내부 클래스)

 

- member

package Inner;
// member Inner
public class InnerTest { // 외부 객체
	private int a;
	protected int b;
	public int c;

	public InnerTest() {
		a = 20;
		b = 30;
		c = 10;
	}

	//static 객체와 무관하게 만들어짐
	class MemberInner{ // member inner class
		public void disp() {
			System.out.println(a);
			System.out.println(b);
			System.out.println(c);
		}
	}

	public static void main(String[] args) {
		//		InnerTest it = new InnerTest();
		InnerTest.MemberInner mi = new InnerTest().new MemberInner();
		mi.disp();
	}
}

/*
 * inner class ( 내부클래스 )
 * : 독립된 클래스가 아니라. 특정클래스에서 멤버처럼 사용되고자 만든 클래스
 * : outer class의 멤버를 자유롭게 사용하기 위해서 사용.
 * : 이벤트처리 할때 많이 사용 ( 그래픽 처리 )
 * 
 * 1. member inner class
 * 2. static inner class
 * 3. local inner class
 * 4. anonymous inner class
 * 
 * : 아우터의 멤버를 내꺼처럼 쓰려고
 * : 실제 쓰는건 2가지 member, anonymous 
 * 
 */

 

 

- static

 

package Inner;
// static Inner
public class InnerStatic {
	private int a;
	protected int b;
	public int c;
	static int d = 50;

	public InnerStatic() {
		a = 20;
		b = 30;
		c = 10;
	}

	//static 객체와 무관하게 만들어짐
	static class MemberInner{ // member inner class
		public void disp() {
			System.out.println(d);

			//			System.out.println(a);
			//			System.out.println(b);
			//			System.out.println(c);
		}
	}

	public static void main(String[] args) {
		InnerStatic.MemberInner st = new InnerStatic.MemberInner(); // 스태틱을 할때 아우터를 통해서 이너의 생성자를 호출함.
		st.disp();
	}

}

 

 

- local

package Inner;
// local Inner
public class InnerLocal {
	private int a;
	protected int b;
	public int c;
	static int d = 50;

	public InnerLocal() {
		a = 20;
		b = 30;
		c = 10;
	}

	public void disp() {
		class LocalInner{
			void output() {
				System.out.println(a);
				System.out.println(b);
				System.out.println(c);
			}

		}
		LocalInner li= new LocalInner();
		li.output(); // 지역이라 지역에서 해결해야함.
	}

	public static void main(String[] args) {
		InnerLocal il = new InnerLocal();
		il.disp();

	}

}

 

- anonymous

 

package Inner;
abstract class Abs{
	abstract void out2();
}

public class InnerAnonymous {
	private int a;
	protected int b;
	public int c;

	public InnerAnonymous() {
		a = 20;
		b = 30;
		c = 10;
	}

	public void disp() {
		new Abs() {
			void out2() {
				System.out.println(a);
				System.out.println(b);
				System.out.println(c);
			}
		}.out2();
	}


	public static void main(String[] args) {
		InnerAnonymous am = new InnerAnonymous();
		am.disp();
	}

}
반응형

'자바과정 > Java' 카테고리의 다른 글

Java 기초 - 10일차  (0) 2021.02.18
Java 실습(어댑터) - 9일차  (0) 2021.02.17
Java 실습(스택&큐) - 7일차  (0) 2021.02.15
Java 기초 - 7일차  (0) 2021.02.15
Java 실습(상속클래스) - 6일차  (0) 2021.02.04

댓글