본문 바로가기
Study Note/Java

JAVA_ Test112_ 인터페이스(Interface) 정의

by 시뮝 2018. 6. 15.
728x90


Test112  인터페이스(Interface) 정의

※ 인터페이스(Interface) : 완전히 미완성된 채로 남겨져 인터페이스 안에 존재하는 그 메소드도 몸체(정의부)가 없기 때문에

   실행 부분이 존재하지 않는다. 클래스를 위한 템플릿으로써의 기능을 수행하는 추상클래스의 한 종류이다.

※ 인터페이스는 클래스와 달리 다중 상속이 가능하며 인터페이스 자체도 상속된다.

   기존의 C++ 언어 등에서 지원되는 다중 상속이 사용 과정에서 많은 문제점을 노출시켰기 때문에 자바에서는 다중 상속의 개념을

   인터페이스라는 개념으로 변형하여 인터페이스를 통해 다중 상속을 구현하는 방법을 지원한다.


※ 인터페이스는 상수와 추상 메소드만 가질 수 있으며 인터페이스 안의 메소드들은 접근제어지시자를 명시하지 않아도

   『public』으로 설정되어 클래스에서 구현(implements)함으로써 바로 접근이 이루어질 수 있다.


※ 특징

   - 추상 클래스의 일종으로 선언만 있고 정의가 없다.

   - final 변수는 가질 수 있다. (상수의 개념)

   - 인터페이스는 『public static final』 상수만 만들 수 있다.

   - 인터페이스를 구현하기 위해서는 『extends』 대신에 『implements』를 이용한다.

   - 하나 이상의 인터페이스를 implements 할 수 있다.

   - 인터페이스를 implements 한 클래스는 인터페이스의 모든 메소드를 Overriding 해야 한다. (안하면 추상클래스됨)

   - 인터페이스가 다른 인터페이스를 상속받을 수 있으며 이 때, 『extends』 키워드를 사용한다.

  또한, 클래스와 달리 인터페이스는 다중 상속이 가능하다.



Demo.java

interface Demo

{

public static final double PI=3.141592;

public int a=10;

//-- 인터페이스의 멤버 변수에 『static final』을 별도로 명시하여 붙이지 않아도

// 자바는 자동으로 『static final』인 상태로 변환하여 읽는다. (그래도 항시 붙여주자. 사용자편의를 위해)


public abstract void print(); //-- 인터페이스는 메소드만 선언 가능(정의 불가)

// public void print();

//-- 인터페이스의 멤버 변수에 『abstract』을 별도로 명시하여 붙이지 않아도

// 자바는 자동으로 『abstract』인 상태로 변환하여 읽는다. (그래도 항시 붙여주자. 사용자편의를 위해)

}


DemoImpl .java

class DemoImpl implements Demo

{

@Override

public void print()

{

System.out.println("인터페이스 메소드 재정의...");

}


public void write()

{

System.out.println("클래스에 정의된 메소드...");

}

}


Test112.java

public class Test112

{

public static void main(String[] args)

{

// Demo ob = new Demo(); → 생성 불가

// DemoImpl obTemp = new DemoImpl();

// Demo ob = obTemp;


// 인터페이스 객체는 상위 객체

Demo ob = new DemoImpl(); //-- 업 캐스팅

ob.print();

//--==>> 인터페이스 메소드 재정의...

// ob.write();

//--==>> 에러 발생


((DemoImpl)ob).write(); //-- 다운 캐스팅

//--==>> 클래스에 정의된 메소드...


System.out.println(Demo.PI); //-- static 이기 때문에...

//--==>> 3.141592


//Demo.a = 30; //-- final 이기 때문에...

//--==>> 에러 발생

}

}


cmd

인터페이스 메소드 재정의...

클래스에 정의된 메소드...

3.141592

계속하려면 아무 키나 누르십시오 . . .







728x90

댓글