package ex0727;
public class Ex01 {
public static void main(String[] args) {
// 외부에서 중첩 클래스의 객체를 생성
Test1.User1 u = new Test1.User1();
u.write();
}
}
class Test1 {
int a = 10;
static int b = 0;
// static 중첩 클래스
// 외부 클래스(Test1)의 객체 생성과 상관 없이 객체를 생성하여 사용할 수 있는 클래스
// 컴파일하면 Test1$User1.class
static class User1 {
int x = 100;
public void write() {
// System.out.println(a); // 컴오류.
System.out.println(b);
}
public void disp() {
Test1 t = new Test1();
System.out.println(t.a);
t.print();
}
}
public void print() {
System.out.println(a + ", "+ b);
}
public static void sub() {
// System.out.println(a); // 컴오류. 클래스 메소드는 인스턴스 변수 접근 불가
System.out.println(b);
}
}
package ex0727;
public class Ex02 {
public static void main(String[] args) {
// 내부 클래스는 외부에서 단독으로 객체 생성이 불가능
// Test2.User2 ob = new Test2.User2(); // 컴오류
// 내부 클래스는 외부 클래스의 객체를 생성후에 생성된 객체를 이용하여 생성
// 내부 클래스는 외부 클래스 내(메소드)에서 사용할 목적으로 만듦(보안에 유리)
Test2 ob = new Test2();
Test2.User2 uu = ob.new User2();
uu.write();
}
}
class Test2 {
int a = 10;
static int b = 20;
// 내부 클래스(member class)
// 외부 클래스(Test2) 객체가 생성 되어야 객체를 생성할 수 있는 클래스
class User2 {
int x = 100;
public void write() {
// 외부 클래스의 인스턴스 변수나 인스턴스 메소드 접근 가능
System.out.println(a+", " +b +", "+x);
// print(); // 가능
}
}
public void print() {
System.out.println(a+", "+b);
}
public void sub() {
// 메소드 내에서 내부 클래스의 객체 생성 및 활용
User2 u = new User2();
u.write();
}
}
'쌍용강북교육센터 > 7월' 카테고리의 다른 글
0727_Ex05_중첩 인터페이스 (0) | 2021.07.27 |
---|---|
0727_Ex03_anonymous class : 익명클래스 (0) | 2021.07.27 |
0727_Ex111~116_throws : Checked, Unchecked ... (0) | 2021.07.27 |
0727_Ex110_tryResource (0) | 2021.07.27 |
0727_Ex106~Ex108_finally (0) | 2021.07.27 |