abstract class 클래스이름 {
//...
}
abstract 리턴타입 메서드이름();
abstract class Player {
abstract void play(int pos);
abstract void stop();
}
//모두 구현
class AudioPlayer extends Player {
void play(int pos) { /*내용 생략*/ }
void stop() { /*내용 생략*/ }
}
//모두 구현하지 않은 경우
abstract class AbstractPlayer extends Player {
void play(int pos) { /*내용 생략*/ } //추상 메서드 구현
}
interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
interface Movable {
void move(int x, int y); //public abstract 생략한 것
}
interface Attackable {
void attack(Unit u); //public abstract 생략한 것
}
interface Fightable extends Movable, Attackable { }
class 클래스이름 implements 인터페이스이름 {
// 인터페이스에 정의된 추상메서드 구현
}
class Figher implements Figtable {
public void move(int x, int y) {/*내용 생략*/}
public void attack(Unit u) {/*내용 생략*/}
}
class Fighter extends Unit implemets Fightable {
public void move(int x, int y) {/*내용 생략*/}
public void attack(Unit u) {/*내용 생략*/}
}
인터페이스 Fightable을 클래스 Fighter가 구현했을 때
Fightalbe f = (Fightable)new Fighter();
Fightable f = new Fighter();
void attack(Fightable f) {
//...
}
→ attack 메서드를 호출할 때는 매개변수로 Fightable 인터페이스를 구현한 클래스의 인스턴스를 넘겨주어야 함.
class Fighter extends Unit implements Fightable {
public void move(int x, int y) {/*내용 생략*/}
public void attack(Fightable f) {/*내용 생략*/}
}
interface MyInterface {
void method();
default void newMethod() {} //디폴트 메서드
}
class A { //외부 클래스
//...
class B { //내부 클래스
// A를 제외하고는 다른 클래스에서 잘 사용하지 않는 것이어야 함
}
//...
}
내부 클래스 | 특징 |
---|---|
인스턴스 클래스 | 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언된다. |
스태틱 클래스 | 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static멤버처럼 다루어 진다. 주로 외부 클래스의 static멤버, 특히 static메서드에서 사용될 목적으로 선언된다. 내부 클래스 중에서 스태틱 클래스만 static멤버를 가질 수 있다. 다만, final과 static이 동시에 붙은 변수는 상수이므로 모든 내부 클래스에서 정의가 가능하다. |
지역 클래스 | 외부 클래스의 메서드나 초기화블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다. |
익명 클래스 | 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용) |
// 1.
new 조상클래스이름() {
// 멤버 선언
}
// 2.
new 구현인터페이스이름() {
// 멤버 선언
}
import java.awt.*;
import java.awt.event.*;
class Exercise7_28 {
public static void main(String[] args) {
Frame f = new Frame();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
e.getWindow().setVisible(false);
e.getWindow().dispose();
System.exit(0);
}
});
}
}