-
[JAVA]java 인터페이스/인터페이스 구현과 형 변환/인터페이스와 다형성/인터페이스 상속Languages/Java 2021. 3. 8. 15:13반응형
인터페이스(interface)란?
모든 메서드가 추상 메서드(abstract method)로 이루어진 클래스
형식적인 선언만 있고 구현은 없다
인터페이스에서 선언된 모든 메서드는 public abstract로 추상 메서드
인터페이스에서 선언된 모든 변수는 public static final로 상수
인터페이스 구현과 형 변화
인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형변환 할수 있다
상속에서의 형 변환과 동일한 의미
단 클래스 상속과 달리 구현코드가 없기 때문에 여러 인터페이스를 구현 할 수 있다
형 변환시 사용 할 수 있는 메서드는 인터페이스에 선언된 메서드만 사용할 수 있다
인터페이스와 다형성인터페이스는 "client code" 와 서비스를 제공하는 "객체"사이와의 약속이다
어떤 객체가 어떤 interface 타입이라 함은 그 interface가 제공하는 메서드를 구현했다는 의미이다
client는 어떻게 구현되엇는지 상관 없이 interface의 정의만을 보고 사용할 수 있다
다양한 구현이 필요한 인터페이스를 설계하는 일은 매우 중요한 일이다Calc
package interfaceEx; public interface Calc { double pI = 3.14; int ERROR = -999999999; int add(int num1, int num2); int sunstracrt(int num1, int num2); int times(int num1, int num2); int divide(int num1, int num2); default void description() { System.out.println("정수 계산기를 구현합니다"); } static int total(int[] arr) { int total = 0; for(int i : arr) { total += i; } return total; } }
Calculator
package interfaceEx; public abstract class Calculator implements Calc{ @Override public int add(int num1, int num2) { return num1 + num2; } @Override public int sunstracrt(int num1, int num2) { return num1 - num2; } }
CompleteCalc
package interfaceEx; public class CompleteCalc extends Calculator{ @Override public int times(int num1, int num2) { return num1 + num2; } @Override public int divide(int num1, int num2) { if(num2 !=0) { return num1 / num2; } return ERROR; } public void showInfo() { System.out.println("Calc 인터페이스를 구현했습니다"); } public void description() { System.out.println("완벽한 계산기 입니다"); } }
CalculatorTest
package interfaceEx; public class CalculatorTest { public static void main(String[] args) { int num1 =10; int num2 = 2; Calc calc = new CompleteCalc(); //타입의 선언된 메서드들만 호출할 수 있다. System.out.println(calc.add(num1, num2)); calc.description(); int[] arr = {1,2,3,4,5}; int sum = Calc.total(arr); System.out.println(sum); } }
실행결과
반응형'Languages > Java' 카테고리의 다른 글
[JAVA] 입출력 스트림/파일 입출력/FileReader/FileWriter (0) 2021.04.23 [java] object 클래스/toString()/래퍼 클래스/스트링/math클래스/Calendar 클래스 (0) 2021.04.23 [JAVA]java 추상 클래스/템플렛 매서드 (1) 2021.03.01 [JAVA]java 오버로딩(overloading)과 java 오버라이딩(overriding)/java 다형성/java 다운캐스팅(downcasting) (0) 2021.02.28 [JAVA]java 상속의 개념/상속과 접근 제어/super/묵시적 형 변환 (0) 2021.02.23