728x90
반응형
인터페이스
특징:
- abstract의 클래스는 interface로 변경이 가능하다
- interface는 다수의 상속이 가능하다
- interface는 interface끼리의 상속이 가능하다. 이 때 interface끼리의 상속은 extends를 사용한다.
- interface로 바꾸는 경우는 다형성 + extends대신 implements를 사용하여 상속한다.
- interface로 선언을 해주는 경우는 기능에 대한 팀원과의 분업 혹은 회사간의 분업으로 인한 특정 기능이 공유되어야 할 때 사용된다.
- 인터페이스를 상속받은 클래스는 반드시 그 메서드를 구현해야 한다.
인터페이스를 통한 기능의 구현 후 main 메서드 안에서 실행하는 예제
회사 내의 1)회사원의 이름과 사원번호를 받아서 저장해주는 메서드와 2)저장받은 메서드를 사원번호와 대조하여 맞으면 회사원의 이름을 출력하는 메서드
코드 설명:
1. 조건문을 부합시킬 목적으로 사용하기 위한 공백의 인터페이스를 생성한다.
2. TestOne, TestTwo의 클래스를 생성하여 기본 멤버변수를 선언한 후 생성자를 생성해 값을 초기화시켜준다.
3. TestOne에만 interface를 implements로 상속받아 TestPrintMain의 클래스에 메서드의 조건문에 부합시키게 만든다.
- TestPrintMain메서드의 instanceof 사용
4. 마지막으로 TestMain클래스에서 TestPrintMain 메서드를 사용하면 조건문이 부합하는 클래스만 overriding이 된다.
interface TestScoreAbove {
// 인터페이스 조건문에 쓸 공백 인터페이스
}
class TestPrintMain {
public static String filterPrint(Object obj) {
if(obj instanceof TestScoreAbove) {
return obj.toString();
}
return "인터페이스 조건 확인 불가";
// instanceof를 통해 조건문, 즉 interface를 상속받은 클래스만 본인의 toString을 오버라이딩
// 할 수 있게되고 상속받지 않은경우 "조건 확인 불가" 라는 문구를 출력
}
}
public class TestOne implements TestScoreAbove{
int KOR;
int ENG;
int MaTH;
// 조건문을 위한 멤버변수와 생성자를 통한 초기화
public TestOne(int kOR, int eNG, int maTH) {
KOR = kOR;
ENG = eNG;
MaTH = maTH;
}
@Override
public String toString() {
if(KOR>10) {
return "점수 확인: " + KOR;
}
return "점수 낮음";
}
// 오버라이딩을 할 toString
}
class TestTwo{
int KOR;
int ENG;
int MaTH;
public TestTwo(int kOR, int eNG, int maTH) {
KOR = kOR;
ENG = eNG;
MaTH = maTH;
}
@Override
public String toString() {
if(KOR>10) {
return "점수 확인: " + KOR;
}
return "점수 낮음";
}
}
class TestMain{
public static void main(String[] args) {
TestOne t1 = new TestOne(50, 40, 80);
TestTwo t2 = new TestTwo(30, 40, 80);
// 각각의 개체를 선언하고 instanceof를 적용한 메서드를 통해 출력하게 되면
// 인터페이스를 상속받은 클래스는 본인의 toStirng을 오버라이딩하여 출력하게 된다.
// 출력문:
// 점수 확인: 50
// 인터페이스 조건 확인 불가
System.out.println(TestPrintMain.filterPrint(t1));
System.out.println(TestPrintMain.filterPrint(t2));
}
}
728x90
반응형
'국비과정 > Java' 카테고리의 다른 글
자바에서 parameter를 여러개 받을 때 (0) | 2022.03.21 |
---|---|
자바 예외처리 catch - try (0) | 2022.02.22 |
자바 추상클래스 abstract (0) | 2022.02.18 |
프로젝트를 설계할 때 생각해야할 순서 (0) | 2022.02.17 |
자바 inheritance - 상속, 메서드 오버라이딩, 다형성 (0) | 2022.02.15 |