티스토리 뷰

It

inner class / 중첩 클래스

Torrent green93 2022. 10. 22. 16:24
반응형

inner class / 중첩 클래스

중첩(이너)클래스(inner class = nested Class)

class A { //아우터클래스

변수,메소드,생성자..

class B{//중첩=이너클래스

변수,메소드,생성자..

}

}

중첩(이너)클래스 특징

1. Outer의 멤버 접근 가능 (private도 접근 가능)

2. 이너클래스 안에서는 static변수 사용불가 (이너클래스를 static으로만들면 사용가능)

class A { //아우터클래스

int num;

static class B{//중첩=이너클래스

static int num =3;

static으로 클래스 선언하고 static 멤버 선언해주면 .

static 멤버가 있으면 아우터 클래스의 멤버(num)에 접근 불가능

}

}

3. 이너클래스를 사용하려면 아우터클래스부터 생성해야함

(객체생성을 아우터클래스의 객체부터 new로 생성한 후 그다음 이너클래스의 객체생성후 사용가능)

4가지 중첩 클래스.

1.member inner class

class Outer{

int num;

public void a(){}

final int N =3;

class Inner{//멤버 이너클래스

public void a(){

이너클래스의 메소드 안에서 접근할수 있는 변수는 아우터클래스의 멤버만 접근가능 또는, 이너클래스의 멤버중 Final (상수)만 접근가능

}

}

}

2. local inner class

class Outer{

int num;

public void a(){

int x=3; //지역변수 (로컬변수)

class Inner{//로컬 이너클래스

이너클래스가 선언된 a(){} 메소드 안에서 선언해줘야함

로컬변수는 a()함수 끝나면 없어지기 때문에 마찬가지로 Inner클래스 정보도 없어짐

}

}

}

3.static inner class

class Outer{

int num;

static class Inner{//로컬 이너클래스

static int num =3;

static 멤버가 있으면 아우터 클래스의 멤버에 접근 불가능

}

}

}

4. 익명클래스 (anonymous class - 이름이 없는 중첩클래스를 의미) (가독성이 높음)

-인터페이스 구현하는 클래스로 쓰일 수 있음

-인터페이스명 변수명 = new 인터페이스명(){ 인터페이스안의 추상메소드들(오버라이딩해서) 구현

인터페이스내 메소드 오버라이딩-> public void a(){멤버변수와 final변수만 접근 가능(7까지) 자바8에서는 멤버변수도 가능}

};

클래스 안에 또다른 클래스를 넣는이유

: A클래스안에 B클래스가 들어있다면 B라는 클래스는 A라는 클래스에서만 사용한다는것임 - 이벤트구현시사용 - 복잡성 증가

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

interface Flyer{

//public abstract void takeOff();

public void takeOff(); //abstract 생략

}

//1.일반크래스(이름있는클래스

class Bird implements Flyer{

@Override

public void takeOff() {

// TODO Auto-generated method stub

}

}

public class AnonyInnerTest {

public static void main(String[] args) {

//1.(일반적으로사용하는) 이름이있는클래스

Flyer b= new Bird();

int kkk=10;

//2. 익명클래스

Flyer f = new Flyer(){

int size =10; // Java 8버전은<왼쪽처럼그냥멤버와final까지접근가능//자바7까지는접근불가능

//final int size =10; // <<왼쪽처럼자바7까지는아우터멤버나final만접근가능

@Override

public void takeOff() {

System.out.print("dd");

System.out.print(size); //접근가능10

//System.out.print(kkk); //kkk접근불가에러

}

};

f.takeOff();

}

}

반응형

'It' 카테고리의 다른 글

Springi Hibernate 8-5 Hibernate 설정  (0) 2022.10.26
SysMaster , heap, garbage collection, ART, TPS, GC  (0) 2022.10.24
Eclipse GEF  (0) 2022.10.20
스레드 , 스레드란?  (0) 2022.10.18
JSP 랭킹구하기 / 순위 구하기  (0) 2022.10.10