자바를 공부해 보자

[중첩클래스 및 상속, 다형성, 추상화, 인터페이스] 중첩클래스의 개요 및 종류

자바

1. 중첩클래스의 개요 및 종류

 

 

(1) 개요

하나의 클래스 내부에 또 다른 클래스를 사용 하는 것

 

종류

일반, 정적, 지역, 익명(무명) 클래스

static / 지역변수

 

자바 안에 들어가는 구성 요소!

 

class A {

//멤버 필드

 

int a;

//생성자

 

A(){}

//멤버메소드

 

class B{

}

//중첩클래스

 

public void disp(){

 

 

 

 

2) 일반 중첩 클래스

 

일반 멤버 필드와 접근 방법이 동일

 

외부 클래스의 객체가 반드시 필요

 

내부에서 클래스의 사용이 빈번할 때 사용

 

 

 

 

 

 

 

3) 정적 중첩 클래스

static

 

*static메소드와 접근 방법이 동일            // static 멤버만 사용가능

*외부 클래스의 객체가 필요하지 않음

*인터페이스의 멤버로 사용이 가능함

 

 

 

 

 

static -> 객체생성 필요없음 , 클래스 이름으로 생성이 가능하다.

 

 

 

 

 

 

 

outer2$Inner2.class

 

$ -> 중첩클래스구나..

 

 

 

 

4) 지역중첩클래스 -> 지역변수(매개변수)

 

 

 

other3$1Inner3

other3$2Inner3

 

 

지역구분해주는 숫자/인덱스 번호

 

 

 

5) 익명(무명)중첩클래스 -> GUI구현

 

 

 

 

Exam_04$1.class

 

 

 

 

 

 

 

package ch08;
class Outer1{
 private int a;
 private static int b;
 static {
  b=20;
 }
 Outer1(){
  a=10;
 }
 public void disp() {
  System.out.println("a="+a);
  System.out.println("b="+b);
  //System.out.println("c="+Inner1.class); //아예 불가함
 }
 class Inner1{
  private int c;
  Inner1(){
   c =30;
  }
  public void disp2() {
   System.out.println("a="+a);
   System.out.println("b="+b);
   System.out.println("c="+c);
  }
  class Inner1_Inner1{}
 }
 
}
public class Exam_01 {
 public static void main(String[] args) {
  Outer1 ot =new Outer1();
  Outer1.Inner1 oi = ot.new Inner1();
  oi.disp2();
  
 }
}

 

 

-----------------------

a=10
b=20
c=30

 

 

 

---------------------

 

 

---------------------------

 

 

 

 

 

 

package ch08;
class Outer2{
 private int a;
 private static int b;
 static {
  b=20;
 }
 Outer2(){
  a=10;
 }
 public void disp() {
  System.out.println("a="+a);
  System.out.println("b="+b);
  
 }
 static class Inner2{
  private int c;
  Inner2(){
   c =30;
  }
  public void disp2() {
   //System.out.println("a="+a);
   System.out.println("b="+b);
   System.out.println("c="+c);
  }
  
 }
 
}
public class Exam_02 {
 public static void main(String[] args) {
  Outer2 ot = new Outer2();
  Outer2.Inner2 oi = new Outer2.Inner2();
  oi.disp2();
  
 }

}

 

----------------------------------

 

 

b=20
c=30

----------------

 

 

 

------------------

 

package ch08;
class Outer3{
 private int a;
 private static int b;
 static {
  b=20;
 }
 Outer3(){
  a=10;
 }
 public void disp() {
  class Inner3{
   private int c;
   Inner3(){
    c = 30;
   }
   public void disp_in() {
    System.out.println("a="+a);
    System.out.println("b="+b);
    System.out.println("c="+c);
   }
  }
  Inner3 in = new Inner3();
  in.disp_in();
 }
}
public class Exam_03 {
 public static void main(String[] args) {
  Outer3 ot = new Outer3();
  ot.disp();
 }

}

 

--------------------------

 

a=10
b=20
c=30

------------------

 

 

 

 

package ch08;
class Outer4{
 public void aaa() {
  System.out.println("aaa메소드");
 }
 public void bbb() {
  System.out.println("bbb메소드");
 }
}
public class Exam_04 {
 public static void main(String[] args) {
  Outer4 ot = new Outer4() {
   public void bbb() {
    System.out.println("안녕하세요bbb메소드입니다");
   }
  };
  
  ot.bbb();
 }

}

 

======================

 

 

출력값: 안녕하세요bbb메소드입니다

 

-----------------------

 

 

 

 

 

메소드를 오버라이드해서 올리겠다.

인터페이스를 활용한 방법

 

 

 

익명중첩페이스