#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 |