티스토리 뷰


  # 익명 내부 클래스
 
 1) 일반적인 형태 : 객체 = new 인스턴스();
 
 2) 익명 클래스



    객체 = new 인스턴스(){
     해당인스턴스가 가지고있는 특정 메서드를 재정의해서 쓸수있다
    } ;



    {} : 클래스의 바디 


  (1) 인스턴스가 없으면 만들 수 없다(숙주가 필요해)
    - 인스턴스에 기생해 있다


  (2) 기존 클래스가 갖고 있는 메서드를
    "재정의" 하기 위해서 익명클래스를 사용한다.


#실습



package anonmousex;


abstract class Car{
 abstract void run();
}
class Bus extends Car{
 void run(){
  System.out.println("경로를 따라 달린다");
 }
}
class Taxi extends Car{
 @Override
 void run() {

  System.out.println("손님을 태우고 달린다");
 }
}
class Patrol extends Car{
 @Override
 void run() {

  System.out.println("도둑을 잡으려고 달린다");
 }
}


public class AnonmousTest {

 public static void main(String[] args) {

  Car c= new Taxi();
  c.run();
  
  c= new Patrol(); // 클래스를 만들어서 인스턴스를 불러 호출
  c.run();
 
  // 자식 클래스 없이 바로 Car을 인스턴스화 식에서 run을 불러내자
  
  //Car car= new Car();
  // 오류가남 --> 추상클래스는  뭔가 만들어 낼때 사용하는 것이 아님
       // 완성되지 않은 클래스

  
  Car car = new Car(){
   @Override // 재정의
   void run() {
    System.out.println("경주 1등을 목표로 달린다");
   }
  };
  car.run();
  // run만 사용 가능 --> 다양성은 없어지지만 즉시성은 생김
  //익명 클래스는 재활용이안됨 (한시적으로 사용)
  // 목표 :  재정의
 }

}



2. 이벤트 처리


이벤트 : 동작에 대한 반응
           (누르고, 떼고, 움직이고)
           윈도우창
           버튼
           글자 입력
   


#실습


package anonmousex;


import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;


class MyWinEvent implements WindowListener{


 @Override
 public void windowOpened(WindowEvent e) {
  // TODO Auto-generated method stub
  
 }
 
 //콜백메서드
 //x버튼을 누를때 반응 하는 메서드
 @Override
 public void windowClosing(WindowEvent e) {

  System.out.println(" x버튼을 눌렀다 ");
  System.out.println("닫는다");
  System.exit(0);
  
 }
 
 @Override
 public void windowClosed(WindowEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void windowIconified(WindowEvent e) {
  // TODO Auto-generated method stub
 }

 @Override
 public void windowActivated(WindowEvent e) {
  // TODO Auto-generated method stub
  
 }
 
 @Override
 public void windowDeactivated(WindowEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void windowDeiconified(WindowEvent e) {
  // TODO Auto-generated method stub
  
 }

  

}
public class AnonmousTest2 {

 public static void main(String[] args) {
  Frame fr = new Frame("이벤트");
  fr.setBounds(100, 100, 400, 400);
  
  fr.setVisible(true);
  // 동작만 함
  
  fr.addWindowListener(new MyWinEvent());
 }


}



# 익명 내부 클래스 사용하기


package anonmousex;


import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;


public class AnonmousTest3 {

 public static void main(String[] args) {
  Frame fr = new Frame("이벤트");
  fr.setBounds(100, 100, 400, 400);
  
  fr.setVisible(true);
  
  fr.addWindowListener(new WindowListener() { //오버라이딩 불러오기 Alt +Shift +s +v



  @Override
   public void windowOpened(WindowEvent e) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void windowClosing(WindowEvent e) {

    System.out.println("익명 클래스 - 창닫기");
    System.exit(0);
   }
   
   @Override
   public void windowClosed(WindowEvent e) {
    // TODO Auto-generated method stub
    
   }
   
   
   @Override
   public void windowIconified(WindowEvent e) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void windowDeiconified(WindowEvent e) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void windowDeactivated(WindowEvent e) {
    // TODO Auto-generated method stub
    
   }
   @Override
   public void windowActivated(WindowEvent e) {
    // TODO Auto-generated method stub
    
   }
  });
 }

}





#버튼 만들기


package anonmousex;


import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;


public class AnonmousTest4 {

 public static void main(String[] args) {


  Frame fr = new Frame("이벤트");
  fr.setBounds(100, 100, 400, 400);


  // 버튼 만들기
  fr.setLayout(new FlowLayout());
  Button btn= new Button("닫기");
  
  fr.add(btn);
  fr.setVisible(true);
  
  
  // 프레임 만들떄
  fr.addWindowListener(new MyWinEvent());
 
  // 버튼 만들떄
  btn.addActionListener(new ActionListener() {
   
   @Override
   public void actionPerformed(ActionEvent e) {

    System.out.println("버튼");
    System.exit(0);
   }
  });
 }

}



'Programing > Java' 카테고리의 다른 글

Java2 -07. 내부클래스 (inner)  (0) 2017.05.17
Java2 - 03. 패키지 Object - Equals  (0) 2017.05.11
Java2 - 02. 패키지 Object- toString  (0) 2017.05.11
Java2 - 01. 예외처리  (0) 2017.05.10
Java1 - 22. 다형성  (0) 2017.05.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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
글 보관함