Java
자바 step9 - AbstractClass(클래스 안에 클래스(내부 클래스))
코딩탕탕
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를 생성하여 바로 객체생성을 하고 사용할 수도 있다.