디폴트메서드는 인터페이스에서 기본으로 제공하는 메서드를 말한다 -> 인스턴스 생성 후 사용가능하다.
정적메서드는 일반클래스와 동일하게 인스턴스를 생성하지 않아도, 호출이 가능하다.
default 인터페이스
package interfaceex;
public interface Calc {
double PI = 3.14;
int ERROR = -999999999;
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
int square(int num);
default void description() {
System.out.println("정수 계산기를 구현합니다.");
//myMethod();
}
}
package interfaceex;
public class CalculatorTest {
public static void main(String[] args) {
int num1 = 10;
int num2 = 5;
int[] arr = {1, 2, 3, 4};
CompleteCalc calc = new CompleteCalc();
calc.description();
//System.out.println(Calc.total(arr));
}
}
- 이처럼 구현체가 있는 메서드는 default 를 통해 구현이 가능하다.(인스턴스는 생성해야함)
default 메서드의 재정의
- Calc 인터페이스의 디폴트 메서드 추가
default void description2() {
System.out.println("재정의 될 예정입니다.");
}
- Calculator 추상클래스
package interfaceex;
public abstract class Calculator implements Calc{
@Override
public void description2() {
Calc.super.description2();
System.out.println("안녕하세요.");
}
}
- 디폴트 메서드도 재정의할수 있으며 상위 클래스의 기본 메서드도 호출할 수 있다.
정적메서드
package interfaceex;
public interface Calc {
double PI = 3.14;
int ERROR = -999999999;
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
int square(int num);
static int total(int[] arr) {
int total = 0;
for(int i : arr) {
total += i;
}
return total;
}
}
package interfaceex;
public class CalculatorTest {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4};
System.out.println(Calc.total(arr));
}
}
- 클래스에 바로 접근후에 사용가능.
- 자바9부터는 메서드의 접근지시자로 private 예약어를 사용할 수 있지만, 나의 jdk 버전이 8이라 생략한다.
출처: do it 자바프로그래밍
'프로그래밍 > Java' 카테고리의 다른 글
기본클래스 - Object (0) | 2019.12.09 |
---|---|
인터페이스의 구현과 상속 (0) | 2019.12.08 |
jdk환경변수 설정하기 (feat. window10) (0) | 2019.12.08 |
인터페이스와 다형성. (0) | 2019.12.07 |
인터페이스 (0) | 2019.12.07 |