디폴트메서드는 인터페이스에서 기본으로 제공하는 메서드를 말한다 -> 인스턴스 생성 후 사용가능하다.

정적메서드는 일반클래스와 동일하게 인스턴스를 생성하지 않아도, 호출이 가능하다.

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
블로그 이미지

파니동

,