#interface


인터페이스는 상수와 구현되지 않은 메서드로만 구성된다. (추상 아닌 메소드는 못들어온다)
추상아닌 메소드와 섞어서 쓰고 싶으면 추상클래스로 만들면 된다.
abstract 클래스는 꼭 추상 메소드만 들어가는게 아니라 추상이 아닌 메소드도 들어갈 수 있지만
interface는 무조건 추상 메소드만 들어가기 때문이다 !!!



interface field 는 기본적으로 public static final 수식어가 붙는다

interface method 는 기본적으로 public, abstract 붙어있다.

때문에 interface의 추상 메소드를 재정의 할때는 무조건 public을 적어줘야 한다. 상속받은 메소드 보다 접근제한자가

커져야 하는데 그 전 메소드가 public 이기 때문이다 .

interface를 implements 하면 무조건 모든 추상메소드를 재정의해줘야한다.


package com.inter;
//interface : 내부에 추상메소드만 가지고 있는 객체. 미완성 객체. 객체 생성 불가능
public interface Myinterface {
    
    //인터페이스 안의 필드는 기본으로 static 변수이다, final이 붙어있다
//총 public staitc fianl 3개가 붙어있다
    int num=100; //static, final

    public abstract void go(); //추상 메소드인데 abstract붙여도 안붙여도 똑같다 interface로 시작했기 때문에
    void stop();//인터페이스 안에 메소드는 기본으로 public abstract 붙어있다.

}



package com.inter;
//interface IShape를 상속 받아 추상 메소드를 완성 시켜 놔야 됨.
public class ICircle implements IShape{ //상속받는 키워드가 implements로 바뀜
    
int r;
    
public ICircle(int r) {
        this.r = r;
    }

    @Override
    public double getArea() { //접근 지정자를 무조건 public 으로 바꿔야한다
//아까 따로 적어주진 않았지만 interface 안에 메소드는
//public 과 abstract 붙어있다.
        return r * r * Math.PI;
    }

    @Override
    public double getCircum() {
        return 2 * r * Math.PI;
    }   
}


//interface 를 implements 해도 상속이라고 봐도 괜찮다.
class Boat{}

public class ICircle extends Boat implements IShape{

}

ICircle 입장에서 보면 Boat{} 은 클래스를 상속 받는 개념이고 IShape 도 implements로 상속 받는 개념이여서 다중 상속이 가능하다
extends 상속은 하나만 받을 수 있지만 interface는 계속해서 추가해서 넣어도 되기 때문에 다중상속이 가능.

interface Seoul{}
class Boat{}

public class ICircle extends Boat implements IShape,Seoul{

}
다 상속 관계로 묶여있음


package com.inter;

public interface Calculator { //틀
    int add(int a, int b);
    int sub(int a, int b);
    int multi(int a, int b);
    int divide(int a, int b);
}


package com.inter;

public class CalculatorImpl implements Calculator {
    
    int a;
    int b;
    
    public CalculatorImpl(int a, int b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public int add(int a, int b) {
        return a+b;
    }

    @Override
    public int sub(int a, int b) {
        // TODO Auto-generated method stub
        return a-b;
    }

    @Override
    public int multi(int a, int b) {
        // TODO Auto-generated method stub
        return a*b;
    }

    @Override
    public int divide(int a, int b) {
        // TODO Auto-generated method stub
        return a/b;
    }

    
}
//이런식으로 사용한다.


'JAVA > JAVA 기본 문법' 카테고리의 다른 글

[JAVA]-#Collection API  (0) 2019.01.20
[JAVA]- instance of 연산자  (0) 2019.01.20
[JAVA]-abstract  (0) 2019.01.20
[JAVA]- static  (0) 2019.01.19
[JAVA]- final  (0) 2019.01.19

+ Recent posts