본문 바로가기
Studynote/Computer Science 12

10.14 제 10장 내부클래스

by e.sunie 2018. 11. 5.

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!!");

        }

}


댓글