티스토리 뷰
# 익명 내부 클래스
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 |