1개 파일 = 클래스 = 객체

     

    종류

    1. 멤버에 있는 내부클래스 

    
    public class OuterTest {
    	
    	int num =1234;
    	String name = "세종대왕";
    	
    	public OuterTest() {
    			System.out.println("OuterTest() 생성자확인");
    			
    	}
    	public void outerPrint() {
    		System.out.println(num + " -> " + name);
    		//외부클래스에서는 내부 클래스의 정보를 사용할수 없다.
    		//객체로 만들면 사용이 가능하다.
    		//System.out.println(no +" ===> "+ username);
    		
    		//내부클래스 객체 만들기 - 현재 클래스(외부클래스) 내에서 내부 클래스를 객체 생성가능하다.
    		//메소드내의 내부클레스는 메소드 호출시 생성된다.
    		InnerTest it = new InnerTest();
    		it.innerPrint();
    		
    	}
    	//내부 클래스(멤버)
    	class InnerTest{
    		int no = 6789;
    		String username = "이순신";
    		InnerTest(){
    			System.out.println("InnerTest() 생성자 확인");
    		}
    		public void innerPrint() {
    			System.out.println(no + " =======> " + username);
    			//내부 클래스에서는 외부 클래스의 정보를 사용할 수 있다.
    			System.out.println(num + "======> " + name);
    		}
    	}
    
    	public static void main(String[] args) {
    		OuterTest ot = new OuterTest();
    		ot.outerPrint();
    		
    		//외부에서 내부클래스 객체를 생성하기 위해서는 외부 클래스 객체를 이용하여 내부 클래스 객체를 생성하여야한다.
    		
    		OuterTest ot2 = new OuterTest();
    		OuterTest.InnerTest it = ot2.new InnerTest();
    		it.innerPrint();
    	}
    
    }
    

     

    2. 메소드 내에 있는 내부클래스

     

    public class MethodInnerClass {
    	
    	String email = "kangsan@tstory.com";
    	
    	public MethodInnerClass() {
    		
    	}
    	public void output() {
    		System.out.println("이메일 ==> " + email);
    	}
    	
    	public void innerClassMethod() {
    		int num = 100;
    		//메소드에 정의된 내부 클래스
    		class InnerCreate{
    			String name = "홍길동";
    			InnerCreate(){
    				
    			}
    			void InnerPrint() {
    				System.out.println("name-----> " + name );
    				System.out.println("num ----> " + num);
    				System.out.println("email ---> " + email);
    				output();
    			}
    		}//
    		
    		//객체생성
    		InnerCreate ic = new InnerCreate();
    		ic.InnerPrint();
    	}
    	public static void main(String[] args) {
    		MethodInnerClass mic = new MethodInnerClass();
    		mic.innerClassMethod();
    
    	}
    
    }
    

     

    3. 익명의 내부 클래스

     

    public class Sample implements SampleImp{
    
    	public Sample() {
    		
    	}
    	public void sum(int max) {
    		int sum = 0;
    		for (int i = 0; i <= max; i++) {
    			sum += i;
    		}
    		System.out.println("1~ "+ max +" 합은 " + sum );
    	}
    
    	public void evenSum(int max) {
    		
    	}
    	public void oddsum(int max) {
    		// TODO Auto-generated method stub
    		
    	}
    }
    public interface SampleImp {
    	public void oddsum(int max); //추상메소드
    	public void evenSum(int max); //추상메소드
    }
    public class AnomTest {
    
    	public AnomTest() {
    		start();
    	}
    	public void start() {
    		//내부의 익명메소드
    		new Sample() {
    			//실행부
    			public void oddSum(int max) { //sample 클래스의 메소드 오버라이딩
    				int s=0;
    				for(int i=1; i<=max; i+=2) {
    					s = s+i;
    				}
    				System.out.println("1~ " + max + "까지의 홀수의 합은 " + s);
    			}
    		}.oddSum(100);
    	}
    	public static void main(String args[]) {
    		new AnomTest();
    	}
    }
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기