-
클래스 03: 내부 클래스와 익명 클래스컴퓨터/Java 2019. 9. 4. 08:55
출처 : 자바 프로그래밍 입문 강좌(인프런)
- 내부 클래스
클래스 안에 또다른 클래스를 선언하는 것
두 클래스의 멤버에 쉽게 접근할 수 있다.
코드가 장황해지기 때문에 자주 사용하지 않는다.
package lec11Pjt001; public class OuterClass { int num = 10; String str1 = "java"; static String str11 = "world"; // 생성자 public OuterClass() { System.out.println("OuterClass constructor"); } // 내부클래스1 class InnerClass() { int num = 100; String str2 = str1; public InnerClass() { System.out.println("InnerClass constructor"); } } // 내부 클래스2 // class도 static을 주면 다른 곳에서 접근 가능 static class SInnerClass { int num = 1000; String str3 = str11; public SInnerClass() { System.out.println("static InnerClass constructor"); } } }
package lec11Pjt001; import com.java.employeeBank.EmployeeBank; public class MainClass { public static void main(String[] args) { OuterClass oc = new OuterClass(); System.out.println("oc.num : " + oc.num); System.out.println("oc.str1 : "+ oc.str1); System.out.println(); // 멤버 inner 클래스 OuterClass.InnerClass in = oc.new InnerClass(); System.out.println("in.num : " + in.num); System.out.println("in.str2 : " + in.str2); System.out.println(); // static inner 클래스 OuterClass.SInnerClass si = new OuterClass.SInnerClass(); System.out.println("si.num : " + si.num); System.out.println("si.str3 : " + si.str3); System.out.println(); } }
객체 안에 또다른 객체가 있다는 것, 로직이 꼬일 수 있어서 최근 잘 사용하지 않는다.
- 익명클래스
이름이 없는 클래스, 주로 메서드를 재정의하는 목적으로 사용된다.
AnonymousClass.java
package lec11Pjt001; public class AnonymousClass { public AnonymousClass() { System.out.println("AnonymousClass constructor"); } public void method() { System.out.println("-- AnonymousClass's method START --"); } }
MainClass.java
package lec11Pjt001; import com.java.employeeBank.EmployeeBank; public class MainClass { public static void main(String[] args) { // 이름없는 객체를 생성하고 override -> 호출 new AnonymousClass() { @Override public void method() { System.out.println(" -- AnonymousClass's Override method START --"); }; }.method(); // 재정의한 메서드 바로 호출 // 이름이 없기 때문에 여기서 끝내면 만들어 놓고도 사용할 수 없다. } }
익명클래스는 인터페이스나 추상클래스에서 주로 이용된다.
'컴퓨터 > Java' 카테고리의 다른 글
클래스 05: 추상클래스 (0) 2019.09.04 클래스 04: 인터페이스 (0) 2019.09.04 상속 (0) 2019.09.03 데이터 은닉 (0) 2019.09.03 패키지와 static (0) 2019.09.03