내부클래스 - 특정클래스 안에 또다른 클래스가 정의됨
하나의 멤버처럼 사용 가능(외부의 모든멤버들을 자신의 멤버처럼 사용가능)
클래스 상속 하나만 받을 수 있는 단점을 어느 정도 보완가능
내부클래스 저장파일 경로는 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();
//////////////////////////////////////////////////////////////
}
}
바로 내부클래스 호출 가능
외부클래스명.내부클래스명 변수명=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();
}
}