ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA 31] 자바 인터페이스 ( Interface )
    Language/Java 2018. 2. 14. 19:05
    반응형


    ■ Interface ( 인터페이스 )

    1. 설명

    1) 모든 멤버 변수가 상수

    2) 모든 메소드가 추상 메소드

        로 구성된  ' 틀 '

    < ex : 상수와 추상 메소드로 구성된 ' 껍데기 ' > 

    2. 특징

    1) interface 앞에는 abstract가 생략이 되어 있다.

    2) interface 의 멤버 변수 앞에는 public static final 이 생략 되어 있다.

    3) interface 의 메소드 앞에는 public abstract 가 생략 되어 있다.

    4) static 메소드를 가질 수 없다.

    5) interface 앞에 접근 제한자는 public 과 default 가 가능하다.


    1
    2
    3
    4
    5
    6
    public abstract interface InterfaceS1{    // interface study 1
        
        public static final int A = 10;
     
        public abstract void m();
    }
    cs

    1
    2
    3
    4
    5
    6
    interface InterfaceS1{    // interface study 1
        
        final int A = 10;
     
        void m();
    }
    cs

    /* 위의 인터페이스와 아래의 인터페이스는 완전하게 같다.
       아래의 인터페이스는 각각의 접근 제한자가 생략되어 있는 것이다.*/


    컴파일이 정삭적으로 되는 모습이 확인 된다.


    6) interface 객체는 반드시 완벽한 하위 클래스를 만들어 그 하위 객체를 형변환하여 생성해야 한다.

    7) class 와 interface 는 implements 예약어로 다중 상속이 가능하다.


    1
    2
    3
    4
    5
    6
    public abstract interface InterfaceS1{    // interface study 1
        
        public static final int A = 10;
     
        public abstract void m1();
    }
    cs

    1
    2
    3
    4
    5
    interface InterfaceS2{
        int B = 20;
     
        void m2();
    }
    cs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class IChild implements InterfaceS1 , InterfaceS2{    // 완변한 하위 클래스를 만들었다.
            // 자식의 접근제한자의 범위가 부모의 접근제한자와 같거나 커야 가능하다.
        public void m1(){
            System.out.println("IChild 의 메소드 1");
        }
        public void m2(){
            System.out.println("IChild 의 메소드 2");
        }
    }
     
    class IUser{
        public static void main(String[] args){
            InterfaceS1 is1 = new IChild();
            InterfaceS2 is2 = new IChild();
            System.out.println("InterfaceS1.A : " + InterfaceS1.A);
            System.out.println("IChild.A : " + IChild.A);
            System.out.println("InterfaceS2.B : " + InterfaceS2.B);
            System.out.println("IChild.B : " + IChild.B);
            is1.m1();
            is2.m2();
        }
    }

    cs




    8) interface 끼리는 extends 예약어로 다중상속이 가능하다.


    1
    2
    3
    4
    5
    6
    public abstract interface InterfaceS1{    // interface study 1
        
        public static final int A = 10;
     
        public abstract void m1();
    }
    cs

    1
    2
    3
    4
    5
    interface InterfaceS2{
        int B = 20;
     
        void m2();
    }
    cs

    1
    2
    3
    4
    5
    6
    interface InterfaceChild extends InterfaceS1 , InterfaceS2{
        
        String NAME = "CIVIC";
        
        void m3();
    }
    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
    public class IChild implements InterfaceChild{    // 완변한 하위 클래스를 만들었다.
            // 자식의 접근제한자의 범위가 부모의 접근제한자와 같거나 커야 가능하다.
        public void m1(){
            System.out.println("IChild 의 메소드 1");
        }
        public void m2(){
            System.out.println("IChild 의 메소드 2");
        }
        public void m3(){
            System.out.println("IChild 의 메소드 3");
        }
    }
     
    class IUser{
        public static void main(String[] args){
            InterfaceChild ic = new IChild();
            System.out.println("InterfaceS1.A : " + InterfaceS1.A);
            System.out.println("IChild.A : " + IChild.A);
            System.out.println("");
            System.out.println("InterfaceS2.B : " + InterfaceS2.B);
            System.out.println("IChild.B : " + IChild.B);
            System.out.println("");
            System.out.println("InterfaceChild.NAME : " + InterfaceChild.NAME);
            System.out.println("IChild.NAME : " + IChild.NAME);
            ic.m1();
            ic.m2();
    ic.m3();
        }
    }
    cs



    3. 인터페이스와 추상 클래스의 공통점

    - 추상 메소드를 가질 수 있다.


    4. 인터페이스와 추상 클래스의 사용 목적

    반응형
Designed by Tistory.