자바-12일차(5) 이클립스

최성현·2023년 6월 30일
0

Java

목록 보기
36/46

내부클래스

내부클래스 - 특정클래스 안에 또다른 클래스가 정의됨
하나의 멤버처럼 사용 가능(외부의 모든멤버들을 자신의 멤버처럼 사용가능)
클래스 상속 하나만 받을 수 있는 단점을 어느 정도 보완가능

내부클래스 저장파일 경로는 src 아닌 bin에 들어가야 확인가능

앱에서 주로 사용

내부클래스의 메서드 선언...바로 내부클래스 접근 불가능/ 외부클래스통해서만 가능
외부클래스명.내부클래스명 변수명=new 외부클래스명().내부클래스명();
==OuterObj.InnerObj obj=new OuterObj().new InnerObj();
OuterObj.InnerObj obj=outObj.new InnerObj();
obj.write();

내부클래스

class OuterObj{

	class InnerObj{
		
		public void write()
		{
			System.out.println("내부클래스의 메소드");
		}
	}
	
	public void showMsg()
	{
		System.out.println("외부클래스의 메소드");
		System.out.println("외부에서 내부클래스 메서드 호출가능");
		
		//내부클래스 바로 생성 가능
		InnerObj inObj=new InnerObj();
		inObj.write();
	}
	
}

메인클래스

ublic class InnerClass_11 {

	public static void main(String[] args) {
			
		OuterObj outObj=new OuterObj();
		outObj.showMsg();
		System.out.println("-------------------------------------");
		
		//내부클래스의 메서드 선언...바로 내부클래스 접근 불가능/ 외부클래스통해서만 가능
		//외부클래스명.내부클래스명 변수명=new 외부클래스명().내부클래스명();
		//==OuterObj.InnerObj obj=new OuterObj().new InnerObj();
		OuterObj.InnerObj obj=outObj.new InnerObj();
		obj.write();
		//////////////////////////////////////////////////////////////
	}

}

내부클래스2

바로 내부클래스 호출 가능
외부클래스명.내부클래스명 변수명=new 외부클래스명().내부클래스명();
Outer.Inner com=new Outer().new Inner();
com.disp();

외부클래스 생성하고 그 변수로 내부클래스 생성가능
외부클래스명 변수1=new 외부클래스명();
외부클래스명.내부클래스명 변수2=변수1.new 내부클래스명();
Outer.Inner2 com2=out.new Inner2();
com2.disp2();

외부클래스(내부클래스 생성)

class Outer{
	
	String name="이민규";
	int age=22;

	
	class Inner{
		
		//내부에서는 외부클래스 멤버 사용 가능
		public void disp()
		{
			System.out.println("***Inner 내부 클래스***");
			System.out.println("이름: "+name+", 나이: "+age);
		}
	}
	
	class Inner2{
		
		//내부에서는 외부클래스 멤버 사용 가능
		public void disp2()
		{
			System.out.println("***Inner2 내부 클래스***");
			System.out.println("이름: "+name+", 나이: "+age);
		}
	}
	
	
	//외부클래스의 메서드 추가
	public void write()
	{
		//외부에서 내부클래스 선언
		Inner in1=new Inner();
		in1.disp();
		
		Inner2 in2=new Inner2();
		in2.disp2();
	}
	
	
}

메인클래스

public class InnerClas_12 {

	public static void main(String[] args) {
		
		Outer out=new Outer();
		out.write();
		
		System.out.println("============================");
		
		System.out.println("다른 클래스 통하지 않고 직접 내부클래스 메서드 호출하려면?");
		
		//바로 내부클래스 호출 가능
		//외부클래스명.내부클래스명 변수명=new 외부클래스명().내부클래스명();
		Outer.Inner com=new Outer().new Inner();
		com.disp();
		
		//외부클래스 생성하고 그 변수로 내부클래스 생성가능
		//외부클래스명 변수1=new 외부클래스명();
		//외부클래스명.내부클래스명 변수2=변수1.new 내부클래스명();
		Outer.Inner2 com2=out.new Inner2();
		com2.disp2();
		

	}

}
profile
백엔드 개발자로서 성장해 나가는 성현이의 블로그~

0개의 댓글