728x90
반응형
package chap10;
class Outer2 {
private int outeriv = 10;
private static int outercv = 20;
class IntanceInner { //내부클래스에서 외부클래스의 private 멤버 접근가능
int iiv = outeriv;
int iiv2 = outercv;
}
static class StaticInner { //내부클래스에서 외부클래스의 private 멤버 접근가능
// int siv = outeriv; //클래스멤버에서 인스턴스멤버에 직접 접근 오류
int siv = new Outer2().outeriv;
static int scv = outercv;
}
void method(int pv) {
//pv : 매개변수. 지역변수
int n = 0;
// n++;
class LocalClass {
int liv = outeriv; //외부클래스의 private 멤버에 접근 가능
int lcv = outercv;
void method(int num) {
num++;
System.out.println("num=" + num);
//지역내부클래스에 사용되는 메서드에서 메서드의 지역 변수 접근시 접근되는 지역 변수는 상수화 되어야 한다.
//지역변수의 변경이 없다면 상수로 본다.
//지역변수의 변경이 있다면 오류발생.
System.out.println("pv=" + pv); //상수화된 변수는 접근 허용
System.out.println("liv=" + liv);
System.out.println("lcv=" + lcv);
System.out.println("Outeriv=" + outeriv);
System.out.println("Outercv=" + outercv);
System.out.println("n=" + n);
}
}
LocalClass lc = new LocalClass();
// pv++;
lc.method(pv);
}
}
public class InnerEx2 {
public static void main(String[] args) {
//IntanceInner, StaticInner 객체의 멤버들을 출력하기
//외부클래스의 method() 호출하기
Outer2 out = new Outer2();
Outer2.IntanceInner ii = out.new IntanceInner();
System.out.println("IntanceInner.iiv=" + ii.iiv);
System.out.println("IntanceInner.iiv2=" + ii.iiv2);
Outer2.StaticInner si = new Outer2.StaticInner();
System.out.println("StaticInner.siv=" + si.siv);
System.out.println("StaticInner.scv=" + si.scv);
out.method(50);
}
}
728x90
반응형
'study > Java' 카테고리의 다른 글
[Java] 28. Lambda1 (람다의 정의) (0) | 2022.03.23 |
---|---|
[Java] 27. 내부클래스3 (내부 클래스 객체에서 사용되는 this) (0) | 2022.03.23 |
[Java] 27. 내부클래스1 (0) | 2022.03.23 |
[Java] 25~26. Test3 풀이 (1부터 100까지 중 임의의 숫자를 컴퓨터가 저장하고, 값을 입력받아 저장된 값을 맞추는 프로그램을 작성하기) (0) | 2022.03.22 |
[Java] 25~26. Test2 풀이 (UnsupportFunctionException 클래스 구현하기) (0) | 2022.03.22 |