10.14.월 제 10장 내부 클래스
1. 내부 클래스
내부 클래스의 강점
⦁외부클래스의 맴버들을 쉽게 접근할 수 있다.
⦁코드의 캡슐화
2.내부 클래스의 종류와 특징
-내부 클래스는 각각의 맴버변수와 같은 기능을 한다고 볼 수 있다.
-각각의 변수와 메서드와 비숫하지만 클래스라는 점.
class Outer { int iv=0; static int cv=0; void myMethod() { int iv=0; } | class Outer { class InstInner{. . . } satatic class statInner{ . . } void myMethod() { class LocalInner {. . . } } } |
인스턴스 클래스 스태틱 클래스
지역 클래스
|
3.내부 클래스의 제어자와 접근성
⦁내부 클래스의 접근제어자는 변수에 사용할 수 있는 접근제어자와 동일하다.
⦁static클래스만 static맴버를 정의할 수 있다.
CONST, cv는 클래스 변수처럼 사용
클래스 이름을 통해 접근가능- 소속을 밝혀야 한다.
외부클래스.내부클래스.특정변수이름
⦁내부 클래스도 외부 클래스의 맴버로 간주되며, 동일한 접근성을 갖는다.
매소드 안에 정의된 클래스 = 지역 클래스
지역클래스 외부 변수의 사용에 있어 제약이 있다.
⦁외부 클래스의 지역변수는 final이 붙은 변수(상수)만 지역클래스내에서 접근 가능
왜? 함수가 살아 있는 순간만 지역변수가 존재. 종료와 동시에 소멸.(특징)
클래스에 일반변수의 접근을 허용하면. 함수가 종료되도 변수가 살아 있을 수 있다. 없어진 것을 참조한다. 상수는 어디에나 존재를 하기에 문제가 되지 않는다.
⦁지역 클래스의 인스턴스가 소멸된 지역변수를 참소할 수 있기에
⦁private은 내부에서 접근가능
인스턴스클래스에서 스태틱변수를 참조할 수 있다 정의는 불가 – 뭔소리일까...
Ii객체의 타입은
외부클래스.내부클래스.객체이름 =
내부 변수는 default로 정의 = 아무때나 호출가능.
스태틱은 클래스 변수
클래스 이름으로 참조가능
외부클래스.내부클래스.클래스이름 으로 바로 참조가능.
스태틱클래스를 먼저 호출 new를 이용하여
인스턴스클래스와 달리 외부 클래스를 먼저 생성할 필요 없음 .
내부클래스는 $표시
같은 이름으로 정의되면 앞에 숫자로 구분해준다.
class Outer { class InstanceInner { int iv = 100; } static class StaticInner { int iv = 200; static int cv = 300; } void myMethod() { class LocalInner { int iv =400; } } }
class InnerEx4 { public static void main(String[] args) { Outer oc = new Outer(); Outer.InstanceInner ii = oc.new InstanceInner(); System.out.println("ii.iv:" + ii.iv); System.out.println("Outer.Static.cv: " + Outer.StaticInner.cv); Outer.StaticInner si = new Outer.StaticInner(); System.out.println("si.iv: " +si.iv); } }
|
클래스에서 제일 가까운 쪽에 있는 것을 먼저 찾는다.
4. 익명클래스
⦁이름이 없는 일회용 클래스, 단 하나의 객체만 생성할 수 있다.
왜 쓰는 감?
사용방법
1.별도의 클래스를 써서 구현
2.클래스의 정의 없이 익명클래스를 사용하여 바로생성
import java.awt.*; import java.awt.event.*;
class InnerEx7 extends Frame { InnerEx7() { Button b = new Button("Start"); b.addActionListener(new EventHandler()); add(b); setSize(200,120); setVisible(true); } public static void main(String[] args) { InnerEx7 f = new InnerEx7(); } }
class EventHandler implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("ActionEvent occured!!"); } } |
'Studynote > Computer Science 12' 카테고리의 다른 글
[정리] Java Chapter 6 객체지향프로그래밍1 (0) | 2018.11.05 |
---|---|
10.14 제 10장 내부클래스 실습 (0) | 2018.11.05 |
10.07.제 9장 java패키지 실습 (0) | 2018.11.05 |
10.07. 제 9장 java패키지 (0) | 2018.11.05 |
09.23 제 7장 객체지향프로그래밍2-2 (0) | 2018.11.05 |
댓글