- 내부 클래스란 클래스 안에 선언된 클래스로 어느 위치에 선언하느냐에 따라서 4가지 형태가 있을 수 있다.
public class InnerExam1{
class Cal{
int value = 0;
public void plus(){
value++;
}
}
public static void main(String args[]){
InnerExam1 t = new InnerExam1();
InnerExam1.Cal cal = t.new Cal();
cal.plus();
System.out.println(cal.value);
}
}
public class InnerExam2{
static class Cal{
int value = 0;
public void plus(){
value++;
}
}
public static void main(String args[]){
InnerExam2.Cal cal = new InnerExam2.Cal();
cal.plus();
System.out.println(cal.value);
}
}
public class InnerExam3{
public void exec(){
class Cal{
int value = 0;
public void plus(){
value++;
}
}
Cal cal = new Cal(); //메소드 안에서 해당 클래스를 이용할 수 있다.
cal.plus();
System.out.println(cal.value);
}
public static void main(String args[]){
InnerExam3 t = new InnerExam3();
t.exec();
}
}
네번째로는 익명클래스가 있다. 익명 중첩 클래스는 익명 클래스라고 보통 말하며, 내부 클래스이기도 하다.
추상 클래스를 상속하여 쓰는 방법.
추상클래스는 객체 생성이 안되기 때문에 MyAction클래스를 만들어야하는 단점 있음.
//추상클래스 Action
public abstract class Action{
public abstract void exec();
}
//추상클래스 Action을 상속받은 클래스 MyAction
public class MyAction extends Action{
public void exec(){
System.out.println("exec");
}
}
//MyAction을 사용하는 클래스 ActionExam
public class ActionExam{
public static void main(String args[]){
Action action = new MyAction();
action.exec();
}
}
//추상클래스 Action
public abstract class Action{
public abstract void exec();
}
//MyAction을 사용하지 않고 Action을 상속받는 익명 클래스를 만들어서 사용
public class ActionExam{
public static void main(String args[]){
Action action = new Action(){
public void exec(){
System.out.println("exec");
}
};
action.exec();
}
}