-
자바 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를 생성하여 바로 객체생성을 하고 사용할 수도 있다.
'Java' 카테고리의 다른 글
자바 step10 - interface(implements, orverride, final 예약어) (0) 2022.11.06 자바 step9 - AbstractClass(override) (0) 2022.11.06 자바 step9 - AbstractClass(override) (0) 2022.11.06 자바 step8 - Extends(super, protected) (0) 2022.10.26 자바 step8 - Extends(extends, casting, Override, super) (0) 2022.10.26