인터페이스(Interface)
프로그램과 사용자를 중간에서 연결하는 매개체
클래스와 클래스를 연결할 수도, 프로그램과 프로그램을 연결할 수도.
인터페이스는 클래스가 아니다. 때문에 객체생성 불가.
일반변수도 없고, 생성자도 없고, 일반메서드도 없음
그럼 뭐가 들어가는가?
주로-'상수', '추상메서드'
+α로 static과 default메서드도 가능
default메서드는 일반메서드와 같이 기능
public static final 키워드를 빼도 자동으로 public static final이 된다.(상수)
인터페이스의 메서드를 추상메서드 형식으로 선언하면 abstract로 붙이지 않더라도 자동으로 추상메서드가 됨
인터페이스는 왜 생겼나?
클래스는 다중 상속을 지원하지 않는다.
인터페이스는 클래스와 별개
그래서 클래스상속과 인터페이스상속을 각각 받는 것이 가능
사용키워드는 implements.
->class dog extends Animal implements 포유류{
}
순서는 클래스가 먼저, 그 뒤에 인터페이스를 추가로. 인터페이스가 여러개도 가능
클래스와 인터페이스가 가지고 있는 모든 추상메서드를 자식클래스에서 오버라이딩해주어야 한다.
인터페이스
package day09.inter.basic;
public interface Inter1 {
//인터페이스는 객체생성이 불가합니다.
//상수, 추상메서드, +@(default메서드, static메서드)
double PI=3.14;//인터페이스에 변수를 선언->public 상수로 선언됩니다.
void method01();//인터페이스에 메서드를 선언-> public 추상메서드가 됩니다.
}
package day09.inter.basic;
public interface Inter2 {
void method02();
}
인터페이스에 생성되는 건 자동으로 상수와 추상메서드
+)단, 의도적으로 static이나 default를 붙여 다른 메서드를 생성하는 것도 가능
인터페이스 상속
package day09.inter.basic;
//인터페이스는 implements키워드로 상속을 받습니다.
public class Basic /*extends Object*/implements Inter1, Inter2{
@Override
public void method01() {
System.out.println("오버라이딩 된 메서드 1번");
}
public void method02() {
System.out.println("오버라이딩 된 메서드 2번");
}
}
method 1과 2는 각각 인터페이스 Inter1과 Inter2에서 상속받고 오버라이딩한 메서드.
인터페이스 안 메서드는 추상메서드이므로 반드시 오버라이딩해주어야 한다.
main
package day09.inter.basic;
public class MainClass {
public static void main(String[] args) {
//인터페이스는 객체생성이 불가합니다.
//Inter1 i = new Inter1(); 불가
//인터페이스도 부모타입이 될 수 있습니다.-인터페이스도 타입이 될 수 있다!
Inter1 b =new Basic();
b.method01();
System.out.println(Inter1.PI);
//이렇게 받으면 Inter1의 기능만 사용하고, override된 메서드만 가능
//b.method02(); 불가
Inter2 ba = new Basic();
ba.method02();
Basic bai = new Basic();
bai.method01();
bai.method02();
System.out.println(bai.PI);
Inter2 i2=ba; //클래스 형변환
i2.method02();
Basic bb=(Basic)ba;
}
}
오버라이딩 된 메서드 1번
3.14
오버라이딩 된 메서드 2번
오버라이딩 된 메서드 1번
오버라이딩 된 메서드 2번
3.14
오버라이딩 된 메서드 2번
인터페이스로 객체를 생성받으면 해당 인터페이스에서 받아 오버라이딩된 메서드만 실행가능
부모자식 상속과 마찬가지로 인터페이스도 생성받은 객체를 받았으면 형변환이 가능
인터페이스 기능
1. 다중 상속을 지원한다.
클래스가 인터페이스를 몇개든지 상속받을 수 있다.
class Dog extends Animal implements 포유류, Ipet, .....
단, 모든 추상 메서드를 클래스에서 오버라이딩해야 한다.
2.메서드 명세서
자바의 인터페이스는 객체의 사용 방법을 정의한 타입(메서드 명세서)으로 객체의 교환성을 높여주기 때문에 다형성을 구현하는 매우 중요한 역할을 한다.
인터페이스 상속
package day09.inter.basic2;
public class Basic implements BasicInter{
@Override
public void insert(int a) {
System.out.println("insert.."+a);
}
@Override
public void info() {
System.out.println("info...");
}
@Override
public String getInfo() {
System.out.println("getInfo...");
return "getInfo";
}
@Override
public int delete(int a) {
System.out.println("delete...");
return 0;
}
}
인터페이스
package day09.inter.basic2;
public interface BasicInter {
//클래스가 가져야할 메서드를 interface에 정의
void insert(int a);
void info();
String getInfo();
int delete(int a);
}
main
package day09.inter.basic2;
public class MainClass {
public static void main(String[] args) {
BasicInter b = new Basic();
b.info();
}
}
info...
3.사용방법이 동일한 클래스를 만드는 기술-프로그램에서 실제 사용되는 방법
인터페이스를 받고 오버라이딩해서 각자 다른 클래스에서.
프린터기가 돌아가는 방법(메서드)은 동일함. LG에서 받거나 삼성에서 받거나.(오버라이딩하니 내용은 다를 것)
1, 2번과 같은 내용이다.
'JAVA' 카테고리의 다른 글
221014 인터페이스 실습 (0) | 2022.10.14 |
---|---|
221014 인터페이스 2 (0) | 2022.10.14 |
221014 abstract 실습 유닛 (0) | 2022.10.14 |
221013 abstract 실습 원과 사각형 넓이 구하기 (0) | 2022.10.13 |
221013 abstract 키워드 (0) | 2022.10.13 |