3-11. 내부클래스

zhyun·2020년 9월 1일
0

java

목록 보기
6/11

내부클래스

** 클래스 안에 선언된 클래스
1) 중첩 클래스 또는 인스턴스 클래스
2) 내부클래스가 static으로 정의되어 있는 경우

  • 정적중첩클래스, static 클래스
    3) 지역중첩 클래스 또는 지역 클래스(local class)
//3) 지역중첩 클래스 또는 지역 클래스(local class)
public class InnerExam3{
	public void exec(){ // 메서드 안에 클래스 생성된 경우
    	static 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();
  }
} 
//2)내부클래스가 static으로 정의되어 있는 경우 
public class InnerExam2{
	static class Cal{ //정적중첩클래스, static 클래스
    	int value = 0;
    	public void plus(){
    		value++;
    
    }
 }
 	public static void main(String[] args){
    	//static한 필드이기때문에 생성하지 않고 바로 접근 가능
    	InnerExam2.Cal cal = new InnerExam2.Cal();
        cal.plus();
        System.ou.println(cal.value);
    
    }
}
//1) 중첩 클래스 또는 인스턴스 클래스
public class InnerExam1{
	class Cal{ // Cal이라는 내부(인스턴스) 클래스
	int value = 0;
    public void plus(){
    	value++;
    }
 }
public static void main(String[] args){
	//Cal 객체 사용방법
    InnerExam1 t = new InnerExam1(); //외부에 있는 클래스 객체 생성
    InnerExam1.cal cal = t.new Cal(); // 해당 Cal 객체 생성 
    바깥쪽클래스.내부타입 변수 = 해당 Cal 객체 생성
    cal.plus();
    System.out.println(cal.value);
 }
}
class Outer{
	int value = 10;
	class Inner{ // 인스턴스 클래스
		int value = 20;
		
		void method2(int value){ // 
			System.out.println(value); // 넘어온 인자값 출력
			System.out.println(this.value); // 20
			System.out.println(Outer.this.value); // 10 : Outer class 기준
		}
	}
	static class Inner2{ // static 클래스
		
	}
	void method(){
	     class Inner3{ //지역클래스 : 메서드안에 선언된
			
		}
	}
}

public class InnerTest { // 내부클래스
	public static void main(String[] args) {
		Outer out = new Outer(); // Outer의 객체 필요 class Inner 접근하려면
		Outer.Inner in = out.new Inner(); // Inner의 객체가 필요
		in.method2(50);
		
		

	}
}


profile
HI :)

0개의 댓글