반응형
인터페이스(Interface)
implements
추상클래스 - 미완성된 요소를 포함, 상속강요
인터페이스 - 모든 메서드가 추상 메서드로만 이루어짐(구현이 안된것들로만 구성), 구현강요
인터페이스 내에서
기능은 미구현(ex) void show(); -> public abstract void show();
값은 상수로
(ex) int a=1 -> public final static int a= 1;
위와 같이 두 방법으로 코드를 작성해도 오류가 나지 않고 각각 두번째의 코드로 인식을 한다.
- new 예약어로 객체 생성 불가
- private 접근제한자 사용 불가 , public 혹은 protected사용
- body ({ })를 붙이지 않는다
- 인터페이스의 추상메서드를 구현하지 않으면, 자식클래스는 추상 클래스가 된다
- 상속(extends)을 먼저 선언한 후에 implements를 선언
- 인터페이스는 여러 개의 인터페이스를 상속할 수 있다
구조

코드
//인터페이스
public interface Calc {
// 명확하게 값까지 지정해야함
double PI = 3.14;
int Error = -999999;
// 추상메서드
int add(int num1, int num2);
int sub(int num1, int num2);
int mul(int num1, int num2);
int div(int num1, int num2);
}
//추상클래스-Calc의 추상메서드를 강제구현
//이 클래스에서는 add와 sub만구현
public abstract class Calculator implements Calc{
@Override
public int add(int num1, int num2) {
return num1+num2;
}
@Override
public int sub(int num1, int num2) {
return num1-num2;
}
//추상메서드 -하위 클래스에서 반드시 구현필요
@Override
public abstract int mul(int num1, int num2) ;
@Override
public abstract int div(int num1, int num2) ;
}
public class CompleteCalc extends Calculator{
//추상클래스를 상속받으면 추상메서드 오버라이드 필요
@Override
public int mul(int num1, int num2) {
return num1*num2;
}
@Override
public int div(int num1, int num2) {
if(num2!=0)return num1/num2;
else return Calc.Error;
}
}
//실행
public class CalculatorTest {
public static void main(String[] args) {
int num1=10;
int num2=5;
CompleteCalc calc=new CompleteCalc();
System.out.println(calc.add(num1, num2));
System.out.println(calc.sub(num1, num2));
System.out.println(calc.mul(num1, num2));
System.out.println(calc.div(num1, num2));
}
}
//15
//5
//50
//2
위 코드에서 구현한 기능을 모두 사용하려면 최종으로 구현한 클래스를 객체로 생성해서 각각의 메서드를 호출하면 된다
인터페이스는 하위클래스에서 구현을 해야하지만 하위클래스에서도 애매한 상황이면 하위클래스의 메서드에 abstract를 붙여서 안할 수 있다. abstract를 붙인 메서드를 가진 클래스의 하위에서는 반드시 그 메서드를 구현해야 한다. 인터페이스 하위의 추상클래스 하위의 클래스에서 구현하게 되면 모든 조건을 만족시키고 상위클래스에서 구현된 메서드들을 사용할 수 있다.
인터페이스 요소
public interface InterfaceTest {
//상수 선언
public static final int A=10;
//추상메서드
public abstract int test();
//추가적인 요소
//private메서드 : body를 만든다면 오류는 안나지만 내부에서 밖에 못쓴다
//구현한 클래스에서 사용할 수 없으며 , interface내에서만 사용가능
//공통 기능으로 정의 할 때 사용
private void test2() {
System.out.println("interface내부에서 공통적으로 사용될 기능 구현");
}
//default메서드
public default void test3() {
test2(); //private 메서드 호출하기
System.out.println("인터페이스를 구현한 객체");
}
//static메서드 : Interfacetest.test04()로 호출
public static void test4() {
System.out.println("인터페이스만으로 실행");
}
}
반응형
'Language > JAVA' 카테고리의 다른 글
(JAVA)예외 처리 (0) | 2023.01.26 |
---|---|
(JAVA)Getter와 Setter (0) | 2023.01.22 |
(JAVA)추상 클래스 (0) | 2023.01.19 |
(JAVA)상속-super, this (0) | 2023.01.19 |
(JAVA)객체 지향 프로그래밍(OOP) (0) | 2023.01.18 |