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

+ Recent posts