Notice
Recent Posts
Recent Comments
Link
Everything has an expiration date
★ 125 - Java 중첩 클래스 : 익명 클래스(Annonymous class) 본문
[Java]/Program source (java)
★ 125 - Java 중첩 클래스 : 익명 클래스(Annonymous class)
Jelly-fish 2023. 9. 15. 16:54/*==============================
■■■ 클래스 고급 ■■■
- 중첩 클래스
================================*/
/*
★ (사용빈도가 높다...)
// 클래스명 : 나중에 쓰기 위해서
// 무명 클래스 : 한번 쓰고 버리는...
// 프로그램에서 일어나는 모든 상황들을 이벤트라고 표현.
// 화면 터치, 드래그 앤 드롭 ...
// 무수히 많은 이벤트들에(터치, 화면 켜기...) 이름을 붙일 필요 x!
○ Annonymous 클래스(익명의 클래스 : 무명 클래스)
- AWT 나 안드로이드 ★ 이벤트 처리 ★ 에서 일반적으로 사용
- 상위 클래스 메소드를 하나 정도 재정의할 필요성이 있을 때 사용
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
- 클래스의 객체가 필요하면 또 다시 클래스를 생성해야 하는
번거로움으로 인해 빈번하게 객체 생성이 필요할 경우
익명의 클래스를 생성하여 처리할 수 있다.
○ 형식 및 구조
new 상위 클래스의 생성자()
{
접근제어지시자 자료형 메소드()
{
...;
}
}; ← check~!!! 세미콜론
*/
// (?) 다중상속이 안 되는데 어떻게 클래스는 Object 외의 다른 클래스를 상속받을 수 있는것인가...
// → 상위 부모 클래스가 Object를 상속받기 때문에 가능한 일이다!
// → ★ Object 클래스는 조상 급의 클래스이다! 맨 최상위상위상위상위의 클래스!!
//
// ex) class SuperTest extends Object
// {
// class SubClass extends SuperTest
// {
// // 부모가 Object를 상속받았기 때문에 가능한 것!!
// }
// }
//
//
// Object가 존재하는 곳은 어디인가?
// ↓ (java.lang! = language(언어))
//
//〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
// import java.lang.Object;
//━━━━━━━━━━━━━━━━━━━━━
// import 구문을 명시하지 않더라도
// import java.lang.*(all); 이 붙어있다!!
//─────────────────────
// 빨강색으로 표시되는 항목들은 (String, System) 모두 lang 패키지에 들어있는
// 클래스들이기 때문이다!!!
// import 하지 않은 이유는...
// ① java.lang 패키지에 들어있기 때문이고
// ② java.lang 패키지에 들어있는 클래스들은 자동으로 자바 소스에 삽입되기 때문에
// → 별도의 임포트 없이 사용할 수 있다.
// 결과적으로 Object 란 클래스는... 모든 클래스들의 조상이고,
// 모든 클래스들은 Object 클래스의 자손들이다.
// 모두 다 lang 패키지들은 별도의 임포트 구문 없이 사용할 수 있다.
// import.java.lang.*
class TestObj // extends Object (Java의 모든 클래스들은 Object를 상속받는다.)
{
/*
Object 의 멤버들~!!!
...;
public String toString()
{
...;
}
...;
*/
/*
@Override
publiv String toString()
{
...;
}
*/
// return 자료형이 Object(오브젝트 객체 타입)
public Object getString()
{
/*
Object ob = new Object();
ob.xx();
ob.yyy();
ob.zzzz();
return ob;
→ 생성한 Object 인스턴스를 반환.
*/
//return new Object();
// ---------- Object 형
// {} → 특정한 기능을 수행하는 것으로 반환하겠다.
// [뒤에 세미콜론]
// return ob; 와 비슷한 형태
// return new Object(){};
// 객체 반환, 다시 정의하여 반환하게끔...
// 설계도 안의 하나의 기능을 이름없이 재정의하여 반환한다.
// → 익명의 클래스
//▶▶▶▶▶▶▶▶▶▶▶[아랫부분 전체가 다 ob]▶▶▶▶
// ① Object의 인스턴스를 반환한다. 특정 기능을 포함한 채로!!!!
return new Object()
{
// ② 특정 메소드 재구성 → 재정의
// Object 클래스(최상위 클래스) 내부의 원본 toString() 메소드를
// 원하는 기능으로 재정의하고자 한다!
// ↓ 메소드 재정의(Overriding)를 한 결과물
@Override
// 접근제어지시자 자료형 메소드()
public String toString()
{
return "익명의 클래스...";
}
// 『익명 중첩 클래스의 최종 의미』**************************
// 이렇게 구성하면... Object 설계도를 통해 생성한 인스턴스의
// toString() 메소드가 Oberriding 된 채로 return(반환)된다!
// 즉, Object 객체 내부의 메소드를 이름 없이(익명: Annonymous)
// 원하는 기능으로 재정의하여 반환하는 것이다!
//***********************************************************
};
//▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶
}
}
// import java.lang.*;
public class Test125 // extends Object
{
/*
Object 의 멤버들 상속~!!!
*/
public static void main(String[] args)
{
TestObj ob = new TestObj();
// [내 생각...]=================================================
// 이것은... Object 클래스 내의 실제 toString()이 반환하는
// 오브젝트 문자열 값일 것 같다...
// Returns a string representation of the object.
// 객체의 문자열 표현을 반환합니다.
System.out.println(ob.toString());
//--==>> TestObj@15db9742
// [내 생각...]=================================================
// 이것은... 리턴 값 (Object 생성자) 를 통해서
// getString() 에 접근하여 메소드의 기능을 재정의(Overriding)한
// 결과물일 것이다. (익명의 중첩 클래스)
System.out.println(ob.getString());
//--==>> 익명의 클래스...
}
}
'[Java] > Program source (java)' 카테고리의 다른 글
127 - Java 자바의 주요 클래스 : Object 클래스, Object 클래스의 toString 메소드 오버라이딩 (1) | 2023.09.15 |
---|---|
126 - Java 자바의 주요 클래스 : import 구문의 사용, Object 클래스, println() 내부에서의 업 캐스팅, toString() 메소드 자동 실행, (0) | 2023.09.15 |
097 Review - Java 오브젝트 : clone() 메소드와, println 내부에서의 업 캐스팅 처리 (0) | 2023.09.15 |
124 - Java 중첩 클래스 : 클래스 내부의 인스턴스 클래스 (0) | 2023.09.14 |
123 - Java 중첩 클래스 : (메소드 내부) 지역 중첩 클래스 (0) | 2023.09.14 |