Java 내부클래스의 제어자와 접근성
by 볼빵빵오춘기내부 클래스의 제어자와 접근성
내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일
더보기
⇒ 원래 클래스 앞에는 (default)또는 public 만 쓸 수 있는데
⇒ public (default), private, protected 다 붙일 수 있다.
예제
예제1
더보기
⇒ static 변수를 사용할려면 static 클래스여야만한다.
⇒ static내부 클래스에서는 외부 클래스의 인스턴스 멤버에 접근할 수 없다.
⇒ 변수가 상수인경우네는 static을 가질 수 있다.
상수에는 클래스이름.상수이름 이렇게 접근도 가능하다.
public class InnerTest {
class InstanceInner{
int iv = 100;
// staitc int cv = 100; // 에러! static 변수를 선언할 수 없다.
final static int CONST = 100; // final static은 상수이므로 허용
}
static class StaticIneer{
int iv = 200;
static int cv = 200; // static클래스만 static 멤버를 정의할 수 있다.
}
void myMethod() {
class LocalInner{
int iv = 300;
// static int cv = 300; // 에러! static 변수를 선언할 수 없다.
final static int CONST = 300;
}
int i = LocalInner.CONST; // => 여긴 가능
// why? 지역 내부 클래스의 static 상수는 메서드 내에서만 사용가능
}
public static void main(String[] args) {
System.out.println(InstanceInner.CONST);
System.out.println(StaticIneer.cv);
// System.out.println(LocalInner.CONST); // => 여긴 불가능
}
}
예제2
더보기
public class InnerTest {
class InstanceInner{}
static class StaticInner{}
InstanceInner iv = new InstanceInner(); // 인스턴스멤버끼리는 직접 접근 가능
static StaticInner cv = new StaticInner(); // static 멤버끼리는 직접 접근 가능
static void staticMethod() { //static 멤버는 인스턴스멤버에 직접 접근 불가
// InstanceInner obj1 = new InstanceInner();
StaticInner obj2 = new StaticInner();
InnerTest outer = new InnerTest(); // 인스턴스클래스는 외부 클래스를 먼저 생성해야 생성가능
InstanceInner obj1 = outer.new InstanceInner();
}
void instanceMethod() { // 인스턴스메서드에서는 인스턴스멤버와 static멤버 모두 접근 가능
InstanceInner obj1 = new InstanceInner();
StaticInner obj2 = new StaticInner();
// LocalInner lv = new LocalInner(); // 지역 내부 클래스는 외부에서 접근할 수 없다.
}
void myMethod() {
class LocalInner{}
LocalInner lv = new LocalInner();
}
}
⇒ 인스턴스멤버가 static멤버 쓰는건 가능
⇒ 반대로 static멤버가 인스턴스멤버로 쓰는건 불가능
예제3
더보기
public class Outer {
private int outerIv = 0;
static int outerCv = 0;
class InstanceInner{
int iiv = outerIv; // 외부 클래스의 private 멤버도 접근가능하다.
int iiv2 = outerCv;
}
static class StataicInner{
// 스택틱 클래스는 외부 클래스의 인스턴스멤버에 접근할 수 없다.
// int siv = outerIv;
static int scv = outerCv;
}
void myMethod() {
int lv = 0;
final int LV = 0; // JDK1.8 부터 final 생략 가능
class LocalInner{
int liv = outerIv;
int liv2 = outerCv;
// 외부 클래스의 지역변수는 final 이 붙은 변수(상수)만 접근가능하다.
// int liv3 = lv;// 에러!!(JDK1.8는 에러아님)
int liv4 = LV;
}
}
}
예제4
예제5
'👩🏻💻 About 프로그래밍 > Java' 카테고리의 다른 글
Java 예외처리하기, try-catch문의 흐름 (0) | 2023.11.30 |
---|---|
Java 프로그램 오류(error,exception), 예외 클래스의 계층구조 (0) | 2023.11.30 |
Java 내부클래스의 종류, 특징, 선언 (1) | 2023.11.30 |
Java 디폴트 메서드와 static메서드 (0) | 2023.11.30 |
Java 인터페이스 장점1+2 (feat. 정리하자면) (1) | 2023.11.30 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기