Ⅰ. 이너클래스 (Inner class)
1. 이너클래스 (Inner class)
- 정의 : 클래스 내부에 포함된 클래스
- 종류
- 멤버클래스
- 1. 인스턴스 이너 클래스
- 2. 정적 이너 클래스
- 지역클래스
2. 인스턴스 멤버 이너클래스
- 특징: 외부(outter)클래스의 모든 접근지정자의 멤버 접근 가능
- 생성클래스명 : A.class, A$B.class
- 객체생성방법
Step#1. 외부클래스 객체 생성
Step#2. 이너클래스 객체 생성
// Example
package sample;
class Dog {
public String name = "순돌이";
void bark() {System.out.println("멍멍");}
// 이너클래스는 외부클래스의 부속 개념으로 만들어 줌
class Tail {
public String name = "긴 꼬리";
void callBark() {
bark();
}
void callName() {
System.out.println(this.name);
System.out.println(Dog.this.name);
}
}
}
public class Main {
public static void main(String[] args) {
Dog a = new Dog();
Dog.Tail b = a.new Tail();
b.callBark(); // 멍멍
b.callName(); // 긴 꼬리 순돌이
}
}
3. 정적 멤버 이너클래스
// Example
package sample;
class Doggy {
public String name = "순돌이"; // 논 스태틱 멤버
static String breed = "진돗개";
void bark() {System.out.println("멍멍");}
// 정적 이너 클래스 : 외부 클래스의 정적 멤버만 사용 가능
static class Eyes {
static void callField() {
// System.out.println(name); 논 스태틱 멤버에 스태틱 멤버가 접근할 수 없음
System.out.println(breed);
}
}
}
public class Main {
public static void main(String[] args) {
Doggy.Eyes.callField(); // 진돗개
}
}
4. 지역 이너클래스
// Example
package sample;
class Book {
void openBook() {
// 메소드 내에 위치한 지역 클래스(메소드 안에서만 사용 가능)
class Page{
int pageNum;
Page(int num) {
this.pageNum = num;
}
}
Page page = new Page(178);
System.out.println("Current Page : " + page.pageNum);
}
}
public class Main {
public static void main(String[] args) {
new Book().openBook(); // Current Page : 178
}
}
'Programming Language > Java' 카테고리의 다른 글
이너클래스 - 3. 이너인터페이스(Inner interface) (0) | 2022.07.14 |
---|---|
이너클래스 - 2. 익명이너클래스(Anonymous class) (0) | 2022.07.14 |
추상클래스 - 2. 인터페이스(Interface) (0) | 2022.07.13 |
추상클래스 - 1. 추상클래스 (abstract class) (0) | 2022.07.13 |
자바 제어자2 (modifier) - 2. abstract (0) | 2022.07.13 |