Day 10(8/12) Abstract, Interface
              
          2016. 8. 16. 10:42ㆍProgramming/Java
**오늘 배운 내용**
1) Abstract 클래스
2) Interface
//생성자를 가진다 => class가 가지는 속성을 다 가진다.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | abstract class A{  A(){}   abstract public void a();//{} => body, abstract는 body 못 가짐  public void b(){}  //추상클래스 is class with abstract method  //abstract: 구현 강제 명령  //추상 클래스와 인터페이스 차이: 추상 클래스는 인터페이스와 달리 "구현"을 가질 수 있다. 하지만 인스턴스를 가질 수는 없다. class B extends A{  //The type B must implement the inherited abstract method A.a() //(해석) 상속 받은 추상 메소드 A.a()을 구현(implement)하라.      public void a(){} //implement == 구현: {} body를 작성하라, 살을 붙여라 //인터페이스는 {}가 없으므로 다른 클래스가 구현해야함 //인터페이스는 다중 상속이 가능(=여러 설계도) //class B implements A{}로 정하면 (A는 인터페이스) //A a = new B();로 구현 가능 } public class L01Abstract { //추상 클래스 사용 이유? 캡슐화를 위해  public static void main(String[] args) {       B b = new B();       b.a(); //부모의 메소드 사용 가능     };  //익명 클래스의 body end     }//main }//class | cs | 
  /* 클래스가 객체로 생성되려면
    * 1. 모든 메소드가 body 가지고 있어야
    * 2. 추상 메소드는 객체 생성시 익명클래스로 바디를 구현해 주면 된다.
    * 3. 생성자가 존재해야 > 프로그래머가 생성자 작성 X면, 컴파일시 default 생성자가 자동 작성
    */
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; class FrameDemo extends Frame{      public FrameDemo(){          super("익명클래스 수업");      this.setBounds(300, 200, 600, 400);      this.setVisible(true);  //Listener class > event가 발생하는 대기 타면서 기다리는 클래스          super.addWindowListener(new WindowAdapter(){  //this와 super 동일, (WindowAdapter~:익명 객체) 대신 EventHandler 사용해도 됨)      @Override      public void windowClosing(WindowEvent e) {      e.getWindow().setVisible(false); //화면을 끈다.      e.getWindow().dispose(); //메모리를 제거 -> 자동 종료됨          System.exit(0);   //프로그램 강제 종료      }   });    }//생성자 end }//class end class EventHandler implements WindowListener{      public void windowOpened(WindowEvent e) {}      public void windowClosing(WindowEvent e) {}      public void windowClosed(WindowEvent e) {}      public void windowIconified(WindowEvent e) {}      public void windowDeiconified(WindowEvent e) {}      public void windowActivated(WindowEvent e) {}      public void windowDeactivated(WindowEvent e) {}   } public class L02AnonymousClass {      public static void main(String[] args) {           new FrameDemo();      } } | cs | 
//익명 클래스: 클래스 명이 없는 클래스, 클래스 선언과 객체 생성을 동시에
//ex. new 클래스명(){오버라이드로 1회용 메소드 구현}
//1회용이기 때문에 생성자도 없고, 1번만 상속에, 하나의 인터페이스만 구현 가능
//Adapter 추상클래스는 interface로 익명클래스 작성시 작성하지 않을 메소드들을 구현하는
//번거로운 일을 막기 위해 보조해주는 보조 클래스다.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | interface I{      abstract void a();      void b();//b() 앞에 abstract가 생략돼 있음 ->  interface의 모든 메소드는 추상 메소드다:내용 없이 구현 강요 }//I end interface I2{ //interface는 뼈대일 뿐, 구현은 밑의 놈 시킴(설문조사 비유)      void c();      void d(); }//I2 end interface I3{      void a();      void c(); }//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 B implements I,I2,I3{      @Override      public void a() {System.out.println("I.a() 호출");}      //I3.a()는 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() 호출");}  } public class L01Interface {      public static void main(String[] args) {       //객체 new A()로 함수 a() b() 호출하는 용도로 사용할 것이다.       //이 때 객체 new A()의 데이터 타입으로 사용될 인터페이스는? I. a(), b() 포함하므로      I calla = new A(); //인터페이스 변수 = new 객체();           calla.a();         //A 객체의 a() 호출           calla.b();      }//main }//class | cs | 
'Programming > Java' 카테고리의 다른 글
| Day 12(8/16) Equals (0) | 2016.08.23 | 
|---|---|
| Day 11(8/15) Object, hashCode (0) | 2016.08.23 | 
| Day 9(8/11) extends, @Override, frame (0) | 2016.08.16 | 
| Day 8(8/10) Review (Constructor, Instance) (0) | 2016.08.16 | 
| Day 7(8/9) MainMethod (0) | 2016.08.09 |