내부 클래스의 제어자와 접근성 - 예제 1
: 클래스는 원래 default , public 접근 제어자만 사용할 수 있지만 내부 클래스의 제어자는 변수에 사용가능한 제어자와 동일
package pkg2;
public class Ex7_12 {
class InstanceInner{
int iv = 100;
// static int cv =100; // 에러! static 변수를 선언할 수 없다.
final static int CONST = 100; // final static 은 상수이므로 허용
}
static class StaticInner{
int iv = 200;
static int cv = 200; // static 클래스만 static 멤버를 정의할 수 있다.
}
void MyMethod() {
class LocalInner{ // 메서드 내에서만 사용할 수 있다.
int iv = 300;
// static int cv = 300;
final static int CONST = 300; // final static 은 상수이므로 허용
}
}
public static void main(String[] args) {
System.out.println(InstanceInner.CONST);
System.out.println(StaticInner.cv);
// System.out.println(LocalInner.CONST); 메서드 안에 있는 지역 내부 클래스의 static 상수는 해당 메서드 내에서만 사용이 가능함.
}
}
내부 클래스의 제어자와 접근성 - 예제 2
- 인스턴스 멤버가 static 멤버를 사용할 수 있지만
- static 멤버는 인스턴스 멤버를 사용할 수 없다.
내부 클래스의 제어자와 접근성 - 예제 3
- 내부 클래스에서는 외부 클래스의 private 멤버도 접근 가능하다.
package pkg2;
class Ex7_14 {
static int outerCv = 0;
private int outerIv = 0;
void myMethod() {
final int lv = 0; // 값이 바뀌지 않는 변수는 상수로 간주
final int Lv = 0; // JDK 1.8 부터 final 생략 가능
class LocalInner { // 2. 지역 내부 클래스를 감싸고 있는 메서드의 상수만 사용가능.
int liv = outerIv;
int liv2 = outerCv;
// 외부 클래스의 지역변수는 final 이 붙은 변수(상수) 만 접근 가능하다.
int liv3 = lv;
int liv4 = Lv;
void method() {
System.out.println(lv);
}
}
}
static class StaticInner {
// static 클래스는 외부 클래스의 인스턴스 멤버에 접근할 수 없다.
// int siv = outerIv;
static int scv = outerCv;
}
class InstanceInner {
int iiv = outerIv; // 1. 외부 클래스의 private 멤버에도 접근이 가능하다.
int iiv2 = outerCv;
}
}
익명 클래스
- 이름이 없는 일회용 클래스. 정의와 생성을 동시에
- 클래스 이름을 제거, 조상의 이름을 작성하는 것임.
- 익명이라서 이름이 없음.
new 조상클래스이름() {
// 멤버 선언
}
new 구현인터페이스이름(){
// 멤버 선언
}
...으아.. 힘들다... 점점 더 내용 정리가 부실해지기 시작..
'👩💻 BackEnd > ☕️ 자바 [Java]' 카테고리의 다른 글
[JSP/JSTL] jsp에서 LocalDateTime -> Date 포맷 변경해서 사용하기 (0) | 2024.05.02 |
---|---|
멀티 스레드와 싱글 스레드, 스레드의 IO블로킹, 쓰레드 그룹 (0) | 2024.04.11 |
[Java] 자바의 정석 : 디폴트 메서드와 static 메서드 (0) | 2024.02.27 |
[Java] 자바의 정석 : 인터페이스의 장점 (0) | 2024.02.27 |
[Java] 자바의 정석 : 인터페이스와 다형성 (1) | 2024.02.27 |