자바/자바 기본

[JAVA] 디폴트 메서드(default method)

은은하게미친자 2022. 8. 30. 17:05
728x90

디폴트메서드

: 추상메서드의 기본적인 구현을 제공하는 메서드

추상메서드가 아니기 떄문에 디폴트 메서드가 새로 추가되어도 해당 인터페이스를 구현한 클래스를 변경하지 않아도 된다.

앞에 defualt가 붙으며, 추상메서드와 달리 일반메서드처럼 몸통이있어야 한다.

+ static메소드도 인스턴스와 관계없는 독립적인 메서드로 인터페이스를 구현한 클래스를 변경하지 않아도 된다.

새로 추가된 디폴트 메서드가 기존메서드와 이름이 중복되어 충돌하는 경우

1 . 여러 인터페이스의 디폴트 메서드 간의 충돌

    -인터페이스를 구현한 클래스에서 디폴트메서드를 오버라이딩 해야한다.

2. 디폴트메서드와 조상클래스의 메소드 간의 충돌 :

    - 조상클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.

 

+tip 필요한쪽의 메서드와 같은 내용으로 오버라이딩 하면댐

 

추상메서드 디폴트 메서드
1
2
3
4
5
6
7
8
9
package kr.co.dong;
 
public interface testinter {
    
    void method();
    void newMethod();
 
}
 
cs
1
2
3
4
5
6
7
8
9
package kr.co.dong;
 
public interface testinter {
    
    void method();
    default void newMethod() {}
 
}
 
cs

 

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
42
43
44
45
46
47
48
49
50
51
52
53
package kr.co.dong;
 
public class DefaultMethod {
    public static void main(String[] args) {
        Child c = new Child();
        c.method1();
        c.method2();
        
        inter1.staticMethod();
        inter2.staticMethod();
    }
 
}
 
class Child extends Parent implements inter1, inter2{
 
    @Override
    public void method1() {
        System.out.println("method1 Child");
    }
    
}
 
class Parent{
    public void method2() {
        System.out.println("method2 Parent");
    }        
}
 
 
interface inter1{
    default void method1() {
        System.out.println("method1 inter1");
    }
    default void method2() {
        System.out.println("method2 inter1");
    }    
    static void staticMethod() {
        System.out.println("staticMethodv inter1");
    }
}
 
interface inter2{
    default void method1() {
        System.out.println("method1 inter2");
    }
    default void method2() {
        System.out.println("method2 inter2");
    }
    static void staticMethod() {
        System.out.println("staticMethodv inter2");
    }
}
cs
method1 Child
method2 Parent
staticMethodv inter1
staticMethodv inter2

 

728x90