1. 인터페이스 정의
- 추상클래스와 비슷. 추상클래스보다 추상화 정도가 더 높음.
- 서비스 요청에 따른 중계자 역할을 하는 것. 실제 구현된 것이 전혀 없는 기본 설계도. (메뉴판)
- 인터페이스는 일반멤버변수, 일반멤버메소드를 갖지 못함.
- 변수는 상수로 자동설정, 메소드는 추상메소드로 정의됨.
- 일반클래스에서 implements 예약어로 특정 인터페이스를 구현하겠다고 명시해야 함.
- 인터페이스가 가지는 추상메소드들은 구현받은 클래스에서 하나도 빠짐없이 오버라이딩해야 함.
- 만들어진 인터페이스의 활용도가 더 높음.
- 인터페이스 형식
[접근제한] interface 인터페이스명 {
상수;
추상메소드;
}
- 구현
class 클래스명 implements 인터페이스명 {
}
2. 인터페이스간의 상속
- 실제 구현력이 없는 인터페이스간의 상속에서는 다중상속이 제공된다.
- 인터페이스는 인터페이스로 부터만 상속받을수 있음.
- 인터페이스가 다른 인터페이스로부터 상속을 받았다고 하지만 오버라이딩을 할 수는 없다.
- 인터페이스는 몸체를 가지는 일반 메소드를 포함할 수 없다.
- 상속을 받은 자식 인터페이스를 구현하는 일반 클래스에서 부모 인터페이스와 자식 인터페이스의
추상 메소드들을 모두 오버라이딩해야 한다.
- 인터페이스간의 다중 상속으로 여러 가지 객체로의 참조변수 변환이 간편하게 이루어지는
유연함이 있다.
=======================
package oop7inner;
interface ISungjuk {
//멤버함수의 정의부분(머릿말)만 올수 있다.
//멤버함수의 몸통부분{} 작성시 에러발생
public void setJumsu(int kuk, int eng);
public abstract void print();//추상메소드 abstract생략가능
}
//=====================
class Sungjuk implements ISungjuk{
int kuk = 0; // 국어
int eng = 0; // 영어
@Override
public void print() {
System.out.println("성적 증명서");
System.out.println("국어: " + this.kuk);
System.out.println("영어: " + this.eng);
}
@Override
public void setJumsu(int kuk, int eng) {
this.kuk = kuk;
this.eng = eng;
}
}
//=====================
public class InterEx1 {
public static void main(String[] args) {
//인터페이스는 추상 메소드만 있음으로 객체를 만들 수 없다.
//ISungjuk is=new ISungjuk(); 객체생성불가능
Sungjuk sj=new Sungjuk();
sj.setJumsu(40, 50);
sj.print();
//인터페이스는 객체를 만들 수 없음으로 기본적으로 다형성을 지원함.
ISungjuk is=new Sungjuk();
is.setJumsu(60, 70);
is.print();
}
}
===========================
파일명 : ICalc.java
package oop7inner;
//인터페이스를 이용하여 사칙연산을 하는 프로젝트를 생성
//+, -, *, /, % 를 구현하는 메소드 원형 5개 선언.
public interface ICalc {
public int nuAdd();
public int nuSub();
public int nuMul();
public int nuDiv();
public int nuNa();
}
파일명 : Calc.java
package oop7inner;
public class Calc implements ICalc{
private int x;
private int y;
public Calc() {}
public Calc(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int nuAdd() {
return x+y;
}
@Override
public int nuDiv() {
return x/y;
}
@Override
public int nuMul() {
return x*y;
}
@Override
public int nuNa() {
return x%y;
}
@Override
public int nuSub() {
return x-y;
}
}
파일명 : CalcEx.java
package oop7inner;
public class CalcEx {
public static void main(String[] args) {
//인터페이스의 다형성으로 접근
ICalc calc=new Calc(10,20);
//Calc cl=new Calc(10,20);
//ICalc calc=cl;
System.out.println("더하기: " + calc.nuAdd());
System.out.println("빼기: " + calc.nuSub());
System.out.println("곱하기: " + calc.nuMul());
System.out.println("나누기: " + calc.nuDiv());
System.out.println("나머지: " + calc.nuNa());
}
}
==========================
파일명 : InterEx2.java
package oop7inner;
class Unit{
int currentHP;//유닛의 체력
int x; //유닛의 위치(x좌표)
int y; //유닛의 위치(y좌표)
}
interface Movable{
void move(int x, int y);
//지정된 위치(x,y)로 이동하는 기능의 메소드
}
interface Attackable{
void attack(Unit u);//지정된 대상(u)를 공격하는 기능의 메소드
//public abstract void attact (Unit u) //원래코드
}
interface Fightable extends Movable, Attackable
{}
class Fighter extends Unit implements Fightable
{
@Override
public void attack(Unit u) {
}
@Override
public void move(int x, int y) {
}
}
public class InterEx2 {
}
===============================
'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글
| [32] Object 클래스 (0) | 2012.05.04 |
|---|---|
| [31] Exception 예외처리 (0) | 2012.05.04 |
| [29] 내부클래스 (0) | 2012.05.03 |
| [28] 추상화 (0) | 2012.05.03 |
| [Buyer클래스 예제] (0) | 2012.05.01 |