1. μ€μ²© ν΄λμ€(nested class)
: ν΄λμ€ λ΄λΆμ μ μΈν ν΄λμ€
μλ‘ μ½κ² μ κ·Όν μ μκ³ , μΈλΆμμλ λΆνμν κ΄κ³λ₯Ό κ°μΆ€μΌλ‘ μ½λμ 볡μ‘μ±μ μ€μΌ μ μλ€.
# λ©€λ² ν΄λμ€
1. μΈμ€ν΄μ€ λ©€λ² ν΄λμ€
static ν€μλ μμ΄ μ€μ²© μ μΈλ ν΄λμ€
μΈμ€ν΄μ€ νλμ λ©μλ μ μΈλ§ κ°λ₯ / μ μ νλμ λ©μλλ μ μΈ λΆκ°λ₯
class A{
class B{
}
}
A ν΄λμ€ μΈλΆμμ B κ°μ²΄λ₯Ό μμ±νλ €λ©΄ A κ°μ²΄λ₯Ό μμ±ν νμ B κ°μ²΄λ₯Ό μμ±ν΄μΌ νλ€.
A ν΄λμ€ λ΄λΆμ μμ±μμ μΈμ€ν΄μ€ λ©μλμμλ μΌλ° ν΄λμ€μ²λΌ B κ°μ²΄λ₯Ό μμ±ν μ μλ€.
A a = new A();
A.B b = a.new B();
νμ§λ§, μΌλ°μ μΌλ‘ A ν΄λμ€ μΈλΆμμ B κ°μ²΄λ₯Ό μμ±νλ μΌμ κ±°μ μλ€.
2. μ μ λ©€λ² ν΄λμ€
: static ν€μλλ‘ μ μΈλ ν΄λμ€
μ μ λ©€λ² ν΄λμ€λ λͺ¨λ μ’ λ₯μ νλμ λ©μλ μ μΈ κ°λ₯
class A{
static class B{
}
}
A ν΄λμ€ μΈλΆμμ μ μ λ©€λ² ν΄λμ€ Cμ κ°μ²΄λ₯Ό μμ±νκΈ° μν΄μλ A κ°μ²΄λ₯Ό μμ±ν νμκ° μμ
A.B b = new A.B();
# λ‘컬 ν΄λμ€
: λ©μλ λ΄μμ ν΄λμ€ μ μΈ
μ κ·Ό μ νμ (public, private) λ° static(μ μ νλ, μ μ λ©μλ)μ λΆμΌ μ μλ€.
void method(){
class A{
A(){}
int abc;
// static int def;
void methodA(){}
//static void methodB();
}
A a = new A();
a.abc = 1;
a.methodA();
}
-> μ£Όλ‘ Tread κ°μ²΄λ₯Ό λ§λ€λ μ¬μ©νλ€.
2. μ€μ²© ν΄λμ€ μ κ·Ό μ ν
# λ°κΉ₯ νλμμ μ€μ²© ν΄λμ€ μ¬μ©μ μ κ·Ό μ ν
: μμμ λ§νλ―μ΄ instance classλ static μμ μ¬μ©μ΄ λΆκ°λ₯νλ€.
// instance field
A a = new A();
B b = new B();
//method
void methodA() {
A ab = new A();
B bc = new B();
}
// static field
// static A staticA = new A(); -> μΈμ€ν΄μ€μ΄λ―λ‘ static λΆκ°λ₯
static B staticB = new B();
//static method
static void methodB() {
// A aa = new A();
B bb = new B();
}
// nested class
class A{}
//static nested class
static class B{}
# λ©€λ² ν΄λμ€μμ μ¬μ©μ ν
: μΈλΆ ν΄λμ€μμ νλλ λ©μλλ₯Ό μ¬μ©ν λ
μΈμ€ν΄μ€ μ€μ²© ν΄λμ€μμλ μ μ , μΈμ€ν΄μ€ νλμ λ©μλ λ λ€ μ¬μ©μ΄ κ°λ₯νμ§λ§,
μ μ μ€μ²© ν΄λμ€μμλ μ μ νλ λ©μλλ§ μ¬μ©μ΄ κ°λ₯νλ€.
μ¦, μ μ μ€μ²© ν΄λμ€μμ μ μ , μΈμ€ν΄μ€ νλμ λ©μλλ₯Ό μ μΈνλ κ²μ κ°λ₯νμ§λ§ μΈλΆ ν΄λμ€μμ νλμ λ©μλλ₯Ό κ°μ Έμ¬ λλ μ μ νλ, λ©μλλ§ κ°λ₯ν κ²μ΄λ€.
int field1;
void method1() {};
static int field2;
static void method2() {};
class instanceClass{
void method() {
field1= 2;
method1();
field2 = 2;
method2();
}
}
static class staticClass{
// λ΄λΆ μ μΈμ μΈμ€ν΄μ€, μ μ λͺ¨λ κ°λ₯(νλ, λ©μλ)
int fieldInstance;
static int fieldStatic;
void method() {
// μΈμ€ν΄μ€ νλ λ©μλλ μ κ·Ό λΆκ°
// field1 = 2;
// method1();
field2 = 2;
method2();
}
}
# μ€μ²© ν΄λμ€μμ μΈλΆ ν΄λμ€ μ°Έμ‘° μ»κΈ°
class outClass{
String a = "a";
void method() {
System.out.println("a class method1");
}
class NestedClass{
String a = "a nested class";
void method() {
System.out.println("a nested class method1");
}
void print() {
System.out.println(outClass.this.a);
outClass.this.method();
System.out.println(this.a);
this.method();
}
}
}
3. μ€μ²© μΈν°νμ΄μ€
: μΈμ€ν΄μ€ λ©€λ² μΈν°νμ΄μ€, μ μ λ©€λ² μΈν°νμ΄μ€ λͺ¨λ κ°λ₯νλ€.
μΈμ€ν΄μ€ λ©€λ² μΈν°νμ΄μ€ : λ°κΉ₯ ν΄λμ€ κ°μ²΄κ° μμ΄μΌ μ κ·Όμ΄ κ°λ₯
μ μ λ©€λ² μΈν°νμ΄μ€: λ°κΉ₯ ν΄λμ€ κ°μ²΄ μμ΄ μ κ·Όμ΄ κ°λ₯
μ€μ²© μΈν°νμ΄μ€λ μ£Όλ‘ μ μ λ©€λ² μΈν°νμ΄μ€κ° λ§μ΄ μ¬μ©λλ€. μ΄λ UI νλ‘κ·Έλλ°μμ μ΄λ²€νΈ μ²λ¦¬λͺ©μ μΌλ‘ μ¬μ©λλ κ²½μ°κ° λλΆλΆμ΄λ€.
public class Button {
Click click;
void setClick(Click click) {
// Click click = new Call(); μλ νμ
λ³νμ΄ λλλ‘ νλ€.
this.click = click;
}
void touch() {
click.onClick();
}
static interface Click{
void onClick();
}
}
//-----------------------------------------------------------------
public class Call implements Button.Click{
@Override
public void onClick() {
System.out.println("μμ");
}
}
//-------------------------------------------------------------------
public static void main(String[] args) {
Button button = new Button();
button.setClick(new Call()); // Click click = new Call();
button.touch();
}
[μΆμ²] p. 407~ p. 421