IT story/Java

D+10 Abstract(추상클래스), Anonymous(익명클래스), Interface(인터페이스)

jason719 2016. 8. 13. 13:19

2016.08.12. Fri. 열 번째 수업


 Javaの授業が2週間経った!マジあっという間だね〜なんか知りたいことがあったら他のことができない人だから、何時間かかってもいろいろやってみる性格でやっとプログラミングの基本的なことを理解してきたと思う。Javaに夢中して資格の勉強はあんまりやっていないのは問題だけど、試験ってなんとかなるやつだな〜笑 って言いながら、今日から3連休なのに資格の勉強に夢中します!試験が来週だから!!




오늘의 수업 내용

  • Abstract class(추상클래스)의 이해
  • Anonymous class(익명클래스): WindowListener를 이용해 창닫기 구현(익명클래스 및 외부클래스)
  • Interface(인터페이스)의 이해
1. Abstract class(추상클래스)의 이해
※ class가 객체로 생성 되려면
모든 method의 바디({})가 있어야 한다. 

☞abstract class는 Anonymous class로 바디({})를 구현해 주면 된다.

☞생성자가 존재해야한다. (프로그래머가 생성자를 작성하지 않으면 컴파일시 default 생성자가 작동 작성됨.


예제

package com.javalesson.ch08abstract;


abstract class A{

A(){}

abstract public void a();//abstract method는 바디({})를 가질 수 없다.

public void b(){

}//b end

}//class A end

class B extends A{

//The type B must implements the inherited abstract method A.a()

@Override

public void a() {

}//<-implements(구현) 바디({})를 작성하라는 의미(뼈대에 살을 붙힌다.)

//public void a()<-뼈대(설계), {}<-살(객체)

}//class B end


public class L01Abstract {


public static void main(String[] args) {

B b = new B();

b.a();

A a = new A(){

public void a(){}

};

}//main end


}//class end


2. Anonymous class(익명클래스): 

WindowListener를 이용해 창닫기 구현(익명클래스 및 외부클래스)

Frame을 extends해서 frame을 생성 후 Listener abstract class를 

Anonymous class & 외부 클래스를 이용해서 창닫기를 구현한다.


※ Listener Class

☞ event가 발생하는 것을 대기하면 감지하는 클래스

※Adapter abstract class는 interface로 anonymous class 작성시 작성하지 않을 method들을 

  구현하는 번거로운 일을 막기위해 보조 해주는 보조클래스이다.



예제.

package com.javalesson.ch08abstract;


import java.awt.Frame;

import java.awt.event.*;



class FrameDemo extends Frame{

public FrameDemo(){

super("Anonymous Class");

this.setBounds(300, 200, 600, 400);

this.setVisible(true);

this.addWindowListener(new EventHandler());//외부클래스 호출

** Anonymous class ** 

// this.addWindowListener(new WindowAdapter(){

// public void windowClosing(WindowEvent e){

//e.getWindow().setVisible(false);//화면만 끈다(ex.메센져)

//e.getWindow().dispose();//메모리를 제거 (1~2초후 자동종료)

// System.exit(0);//프로그램 강제종료

// }

// }); //Anonymous class end// 

}//생성자 end

}//class end


class EventHandler implements WindowListener{

public void windowClosing(WindowEvent e){

e.getWindow().dispose();

}

@Override

public void windowOpened(WindowEvent e) {}


@Override

public void windowClosed(WindowEvent e) {}


@Override

public void windowIconified(WindowEvent e) {}


@Override

public void windowDeiconified(WindowEvent e) {}


@Override

public void windowActivated(WindowEvent e) {}


@Override

public void windowDeactivated(WindowEvent e) {}

}//class end


public class L02AnonymousClass {

public static void main(String[] args){

new FrameDemo();

}//main end

}//class end



3. Interface(인터페이스)의 이해

 예제를 만들어서 interface에 대해 이해하자

 객체 new A()를 method a(), b() 호출하는 용도로 사용할 것이다.

 이때 객체 new A()의 데이터타입으로 사용될 interface는? interface I


※ 서로 다른 interface class에 속해 있어도 함수 형태가 완전 똑같으면 동일 함수이다.

    이때 사용되는 것은 첫 번째 클래스의 함수가 사용된다.


예제.

package com.javalesson.ch09interface;

interface I{

abstract void a();

void b();//type b() 앞에abstract가 생략되어 있다.

//interface class 안의 모든 함수는 abstract이다.

}//class I end

interface I2{

void c();

void d();

}//class I2 end

interface I3{

void a();

void c();

}//class I3 end


class A implements I,I2{

@Override

public void a() {System.out.println("I.a()호출"); }

@Override

public void b() {System.out.println("I.b()호출");}


@Override

public void c() {System.out.println("I.c()호출");}


@Override

public void d() {System.out.println("I.d()호출");}

}//class A end


class B implements I,I2,I3{

@Override

public void a() {System.out.println("I.a()호출"); }

@Override

public void b() {System.out.println("I.b()호출");}


@Override

public void c() {System.out.println("I.c()호출");}


@Override

public void d() {System.out.println("I.d()호출");}


}//class B end

public class L01Interface {

public static void main(String[] args){

I a = new A();

a.a();

a.b();

}//main end

}//class end