ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 step9 - AbstractClass(클래스 안에 클래스(내부 클래스))
    Java 2022. 11. 6. 14:42

     

    package test.mypac;
    
    public class Zoo {
    	/*
    	 *   클래스 안에 정의할 수 있는게 뭐가 있지요?
    	 *   
    	 *   생성자, 필드, 메소드, 클래스
    	 */
    	//클래스 안에 클래스(내부 클래스)
    	public class Monkey{
    		public void say() {
    			System.out.println("안녕! 나는 원숭이야");
    		}
    	}
    	//내부 클래스
    	public class Tiger{
    		public void say() {
    			System.out.println("안녕!~ 나는 호랑이야");
    		}
    	}
    	//메소드
    	public Monkey getMonkey() { //내부 클래스로 객체를 생성해서 리턴해주는 메소드 
    		return new Monkey();
    	}
    	public Tiger getTiger() {
    		return new Tiger();     
    	}
    }

    Zoo class를 생성하였고, 그 안에서 다시  Monkey, Tiger class를 생성하였다(내부 클래스).

     

     

    package test.main;
    
    import test.mypac.Zoo;
    import test.mypac.Zoo.Monkey;
    import test.mypac.Zoo.Tiger;
    
    public class MainClass03 {
    	public static void main(String[] args) {
    		/*
    		 *  1. Zoo 객체를 생성해서 참조값을 z 라는 지역 변수에 담아보세요.
    		 *  
    		 *  2. z 안에 있는 참조값을 이용해서 getMonkey() 메소드를 호출해서 리턴되는 값을
    		 *     m1 이라는 지역 변수에 담아보세요.
    		 *     
    		 *  3. m1 안에 있는 참조값을 이용해서 say() 메소드를 호출해 보세요.
    		 */
    		Zoo z=new Zoo();
    		Monkey m1=z.getMonkey();
    		m1.say();
    		
    		
    		// Zoo 클래스에 있는 getTiger() 메소드를 호출해서
    		// 리턴되는 값을 t1 이라는 지역 변수에 담아보세요.
    		
    		// t1 안에 있는 참조값을 이용해서 say() 메소드를 호출해보세요.
    		
    		z.getTiger();
    		Tiger t1=z.getTiger();
    		t1.say();
    		// 메소드 안에도 클래스를 정의할 수 있다. 해당 메소드 안에서만 사용 가능하다.
    		class Gura{
    			public void say() {
    				System.out.println("안녕 나는 구라야!");
    			}
    		}
    		Gura g1=new Gura();
    		g1.say();
    	}
    }
    
    <console>
    안녕! 나는 원숭이야
    안녕!~ 나는 호랑이야
    안녕 나는 구라야!

    먼저 Zoo 객체를 생성하고, 그 객체 안에 있는 getMonkey() 메소드를 호출한다. getMonkey() 메소드는 Monkey 객체를 생성하는 역할을 하고 있으며 메소드를 호출함으로서 m1이라는 변수명으로 객체를 생성할 수 있다.  Tiger 또한 매한가지다.

    class 안에 class가 있기 때문에 단순히 Zoo class를 생성하여 Monkey나 Tiger의 say() 메소드는 사용할 수 없다.

     

    해당 페이지에서 Gura라는 class를 생성하여 바로 객체생성을 하고 사용할 수도 있다.

     

    댓글

Designed by Tistory.