인터페이스
추상클래스와 마찬가지로 인스턴스를 생성할 수 없다.
인터페이스는 다른 인터페이스를 'extends' 키워드로 상속받을 수 있고, 인터페이스의 구현은 'implements' 키워드를 사용한다.
인터페이스는 다중 상속이 가능하다.
기능(메소드)의 구현을 강제함으로써 표준, 약속 강제성 있는 규칙을 유도할 수 있다.
인터페이스를 구현한 다양한 객체를 사용함 (다형성)
interface 인터페이스이름 {
public static final float pi = 3.14F;
public void makeSomething();
}
→ 인터페이스는
모든 메서드가 추상 메서드로 선언된다. public abstract
모든 변수는 상수로 선언된다. public static final
- interface 예제
Calc 클래스
1 2 3 4 5 6 7 8 9 10 | package ch03; public interface Calc { int add(int n1, int n2); public abstract int substract(int n1, int n2); public abstract int times(int n1, int n2); public abstract double devide(int n1, int n2); } | cs |
→ 인터페이스에서 쓰이는 변수들은 모두 추상 메서드이다. 그렇기 때문에 'public abstract'를 생략하여 적어도 된다.
Calculator 클래스
1 2 3 4 5 6 7 8 9 10 11 12 | package ch03; public abstract class Calculator implements Calc { @Override public double devide(int n1, int n2) { if (n2 == 0) { System.out.println("0으로 나눌 수 없습니다."); } return 0; } } | cs |
→ 인터페이스를 구현할 때는 'implements'키워드를 사용해야 한다.
→ 추상클래스와 인터페이스의 다른 점은 구현을 해야할 때 추상클래스는 모든 메서드를 구현해주어야 하지만,
인터페이스는 상수로 선언되어 있기 때문에 골라서 구현을 해주고 싶은 메서드만 구현이 가능하다.
(그래서 위 코드에서는 0으로 나누면 ArithmeticException이 발생하기 때문에 devide 메서드만 따로 구현해주었다.)
CompleteCalc 클래스
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 32 33 34 35 36 37 38 39 40 41 | package ch03; public class CompleteCalc extends Calculator { public void showInfo() { System.out.println("계산 완료"); } @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 static void main(String[] args) { Calc calc=new CompleteCalc(); calc.devide(1, 0); if(calc instanceof CompleteCalc) { ((CompleteCalc) calc).showInfo(); } } //end of main } //end of class <결과 화면> 0으로 나눌 수 없습니다. 계산 완료 | cs |
→ 다형성을 이용하여 Calc클래스로 CompleteCalc클래스 객체를 생성해주고 0으로 나눈 결과 값을 출력하도록 하였다.
'프로그래밍 > Java' 카테고리의 다른 글
Java_추상 클래스(abstract class) (0) | 2023.02.14 |
---|---|
Java_Object클래스 (0) | 2023.02.14 |
Java_상속과 다형성 (0) | 2023.02.14 |
Java_배열, 객체 배열 (0) | 2023.02.12 |
Java_static변수와 메서드 (0) | 2023.02.12 |