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
계속하려면 아무 키나 누르십시오 . . .
'Study Note > Java' 카테고리의 다른 글
JAVA_ Test114_ 인터페이스(Interface) 정의 (0) | 2018.06.16 |
---|---|
JAVA_ Test113_ 인터페이스(Interface) 정의 (0) | 2018.06.16 |
JAVA_ Test111_ 상속 관계에 있는 클래스들 간의 캐스팅 / 업 캐스팅, 다운 캐스팅 (0) | 2018.06.15 |
JAVA_ Test110_ 추상 클래스(Abstract) (0) | 2018.06.15 |
JAVA_ Test109_ 상속(Inheritance) / 메소드 오버라이딩(mathod Overriding)의 특징 (0) | 2018.06.15 |
댓글