일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 2156
- Database
- 그대로 출력하기
- n x 2 타일링 2
- DP
- 동적계획법
- Eclipse
- 소숫점처리
- 10951
- JOIN
- 반복문
- ANSI JOIN
- 입출력
- 데이터길이
- Dynamic Programming
- select
- 백준
- SQL
- darkest dark
- 알고리즘
- 자바
- 변수
- Java
- 문자열
- 데이터베이스
- db
- algoritm
- 오라클
- Algorithm
- oracle
Archives
- Today
- Total
Cracking Code
[Java] 인터페이스 (Interface) 본문
자식 클래스의 메서드 등을 강제할 때 추상 클래스 이외에 인터페이스를 사용할 수 있습니다.
인터페이스
추상 클래스와는 다르게 상수와 추상 메서드만 가질 수 있습니다.
상수는 public static final 키워드가 자동으로 지정되며
추상 메서드는 public abstract 키워드가 자동으로 지정됩니다.
객체 생성을 할 수 없으므로 독자적으로 사용할 수 없습니다.
public interface interface_name {
(public static final) data_type constant_name = value; // 상수
(public abstract) void method_name([data_type variabel1, ...]); // 추상 메서드
}
public class class_name implements interface_name {
@Override
public void method_name([datatype variabel1, ...]) {}
}
인터페이스는 interface 키워드를 사용하여 정의할 수 있으며
상수와 추상 메서드만을 가져야 합니다.
클래스는 implements 키워드를 사용하여 인터페이스를 구현할 수 있으며
반드시 추상 메서드를 오버라이딩해야 합니다.
E.g.
// Action.java - 인터페이스
public interface Action {
public static final int HP = 100;
public abstract void attack(Fighter f);
public abstract void takeDamage(int damage);
}
// Fighter.java - Action 인터페이스를 사용하는 클래스
public class Fighter implements Action {
private String name;
private int hp = Action.HP;
private int damage;
public Fighter(String name, int damage) {
this.name = name;
this.damage = damage;
}
@Override
public void attack(Fighter f) {
System.out.println(name + "이(가) " + f.getName() + "을(를) 공격하였습니다.");
f.takeDamage(damage);
}
@Override
public void takeDamage(int damage) {
hp -= damage;
System.out.println(name + "이(가) " + damage + "만큼의 데미지를 입었습니다.");
System.out.println(name + "의 hp: " + hp);
}
public String getName() {
return name;
}
}
// Main.java - main
public class Main {
public static void main(String[] args) {
Fighter f1 = new Fighter("dev", 10);
Fighter f2 = new Fighter("boss", 50);
f1.attack(f2);
}
}
// 실행 결과
dev이(가) boss을(를) 공격하였습니다.
boss이(가) 10만큼의 데미지를 입었습니다.
boss의 hp: 90
인터페이스는 추상 클래스와는 다르게 생성자를 가질 수 없습니다.
또한 오로지 상수만을 필드로 가지며 모든 메서드는 추상 메서드여야 합니다.
Fighter 클래스로 Action 인터페이스를 구현하여 정의하면
Action 인터페이스에 정의된 추상 메서드 attack(f:Fighter) 과 takeDamage(damage:int) 를 오버라이딩해야 합니다.
추상 클래스와 비슷하게 메서드에 대한 강제성을 부여받게 됩니다.
'Java > Java language' 카테고리의 다른 글
[Java] 추상 클래스 (Abstract class) (0) | 2020.08.25 |
---|---|
[Java] 다형성 (Polymorphism) (0) | 2020.08.25 |
[Java] 메서드 오버라이딩 (Method Overriding) (0) | 2020.08.13 |
[Java] 상속 (Inheritance) (0) | 2020.08.12 |
[Java] this 키워드 (0) | 2020.08.09 |
Comments