인터페이스 정의하는 방법
접근제어자 interface 인터페이스 이름 {
public static final 타입 상수 이름 = 값;
...
public abstract 메소드 이름 (매개변수 목록);
...
}
- 클래스와 달리 인터페이스의 모든 필드 -> public static final 이야 함
- 모든 메소드 -> public abstract 이어야 함
- 모든 인터페이스에 공통으로 적용되는 부분으로 이 제어자는 생략 가능
인터페이스 구현하는 방법
class 클래스 이름 implements 인터페이스이름 {...}
만약 모든 추상 메소드를 구현하지 않는다면 abstract 키워드를 사용하여 추상 클래스로 선언해야 함
ex)
interface Person { public abstract void say(); }
class Hong implements Person {
public void say() {
System.out.println("안녕");
}
}
class Jung implements Person {
public void say() {
System.out.println("안녕하세요");
}
}
인터페이스 래퍼런스를 통해 구현체를 사용하는 방법
인터페이스 참조 변수= new 구현클래스();
구현클래스.메소드();
interface Person { public abstract void say(); }
class Hong implements Person {
public void say() {
System.out.println("안녕");
}
}
class Jung implements Person {
public void say() {
System.out.println("안녕하세요");
}
}
public class Main {
public static void main(String [] args) {
Hong h = new Hong();
Jung j = new Jung();
h.say();
j.say();
}
}
인터페이스 상속
class 클래스이름 extends 상위 클래스 이름 implements 인터페이스이름 {...}
public interface 인터페이스명 extends 인터페이스1 , 인터페이스2 {...}
인터페이스는 인터페이스로부터만 상속을 받을 수 있으며, 여러 인터페이스를 상속 받을 수 있음
ex)
interface Animal { public abstract void cry(); }
interface Pet { public abstract void play(); }
class Cat implements Animal, Pet {
public void cry() {
System.out.println("냐옹냐옹!");
}
public void play() {
System.out.println("쥐 잡기 놀이하자~!");
}
}
class Dog implements Animal, Pet {
public void cry() {
System.out.println("멍멍!");
}
public void play() {
System.out.println("산책가자~!");
}
}
public class Polymorphism04 {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
c.cry();
c.play();
d.cry();
d.play();
}
}
인터페이스의 기본 메소드 (Default Method) , 자바 8
default 메소드 -> 추상 메소드가 아니기 때문에 default 메소드가 새로 추가되어도 해당 인터페이스를 구현한 클래스 변경 필요 x
default 반환타입 메소드명() {...}
인터페이스의 static 메소드 ,자바 8
static 메소드 -> 구현하는 클래스에서는 인터페이스의 static 메소드를 변경하는 것 불가능 , 인스턴스 생성 없이 '참조변수명.메소드()'를 통해 접근 가능
static 반환타입 메소드명() {...}
인터페이스의 private 메소드 , 자바 9
private 메소드 -> 다른 인터페이스 , 클래스가 숨기길 원하는 메소드에 대한 접근 막을 수 있음 , 해당 메소드를 가진 인터페이스 내의 메소드들만 호출 가능
private 반환 타입 메소드명() {...}
private static 반환타입 메소드명() {...}
'🦁아기사자' 카테고리의 다른 글
[Java] Enum (0) | 2025.03.26 |
---|---|
[Java] 멀티스레드 프로그래밍 (0) | 2025.03.25 |
[Java] 패키지 (0) | 2025.03.19 |
[Java] 상속 (0) | 2025.03.18 |
[Java] 클래스 (class) (0) | 2025.03.18 |