인터페이스의 개념
- 모든 메서드가 추상 메서드로 선언됨 public abstract
- 모든 변수는 상수로 선언됨 public static final
인터페이스의 특징
- 추상 메서드: 인터페이스는 추상 메서드(구현부가 없는 메서드)만을 가질 수 있습니다. 자바 8부터는 default 메서드와 staitc 메서드를 가질 수 있게 되었습니다.
- 다중 상속: 클래스는 여러 인터페이스를 구현할 수 있으므로, 다중 상속의 효과를 낼 수 있습니다. ( 상속관계와 차이점)
- 구현: 클래스가 인터페이스를 구현할 때는 implements 키워드를 사용합니다.
interface Animal {
// 추상 메서드만 선언 가능
// public abstract void eat();
// public abstract void move();
// 축약 가능
void eat();
void move();
}
// implements - 구현하다
class Dog implements Animal {
@Override
public void eat() {
System.out.println("먹이를 먹다");
}
@Override
public void move() {
System.out.println("촐랑촐랑 다닌다");
}
}
class Bird implements Animal {
@Override
public void eat() {
System.out.println("모이를 먹다");
}
@Override
public void move() {
System.out.println("날아 다니다");
}
}
public class AnimalTest {
public static void main(String[] args) {
// Animal animal = new Animal(); 인터페이스는 기본적으로 new 할 수 없다
Animal dog = new Dog(); // Animal <- Dog 다형성, 업캐스팅 된 상태
Animal bird = new Bird();
dog.eat();
dog.move();
bird.eat();
bird.move();
}
}
※ 인터페이스(점선)
public interface Calc {
int add(int n1, int n2);
int substract(int n1, int n2);
int times(int n1, int n2);
double divide(int n1, int n2);
}
public abstract class Calculator implements Calc {
@Override
public double divide(int n1, int n2) {
if (n2 == 0) {
System.out.println("0으로 나눌 수 없습니다");
return 0;
}
return n1 / n2;
}
}
public class CompleteCalc extends Calculator {
@Override
public int add(int n1, int n2) {
return n1 + n2;
}
@Override
public int substract(int n1, int n2) {
return n1 - n2;
}
@Override
public int times(int n1, int n2) {
return n1 * n2;
}
public void showInfo() {
System.out.println("계산 완료");
}
// 코드 테스트 메인 함수
public static void main(String[] args) {
Calc calc = new CompleteCalc(); // 업 캐스팅된 상태
System.out.println(calc.add(10, 10));
System.out.println(calc.divide(10, 0));
System.out.println("-------------------------");
((CompleteCalc) calc).showInfo();
// 반복문, 제어문 활용한다면 instanceof 연산자를 기억하자
if (calc instanceof CompleteCalc) {
((CompleteCalc) calc).showInfo();
}
}
}
'Java > Java' 카테고리의 다른 글
String, StringBuffer 클래스 (0) | 2024.04.26 |
---|---|
Object 클래스 (0) | 2024.04.25 |
추상 클래스 ( abstract class ) (0) | 2024.04.24 |
다형성 ( Polymorphism ) (0) | 2024.04.24 |
메서드 오버로딩 (0) | 2024.04.24 |