Instanceof
인터페이스의 instanceof의 문장은 다음과 같다.
if(인스턴스 instanceof (interface or extends class) )
인스턴스의 클래스가 직접 구현한 interface인지, 아니면 상속받은 클래스가 구현한(간접구현) 것이면 True를 반환한다.
package interFaces;
interface PrinterA{
void PrintA(String str);
}
class SimpleP implements PrinterA {
@Override
public void PrintA(String str) {
System.out.println("프린터");
}
}
class MultiP extends SimpleP{
public void PrintA() {
super.PrintA("프린트1");
super.PrintA("프린트2");
super.PrintA("프린트3");
}
}
public class instanceofInter {
public static void main(String[] args) {
PrinterA S = new SimpleP(); // 인터페이스 직접 구현
PrinterA M = new MultiP(); // SimpleP를 상속받아서 간접적으로 구현
if(S instanceof PrinterA){
System.out.println("직접구현");
}
if(M instanceof PrinterA){
System.out.println("간접구현");
}
}
}
S는 PrinterA의 인터페이스를 직접 구현한 SimpleP를 가지고 있으며, M은 SimpleP가 구현한 PrintA 메소드를 간접적으로 다시 구현하였다.
아쉽게도 클래스다이어그램을 그릴줄 모른다 :(...
여튼... S(SImpleP)와 PrinterA의 관계는 직접 구현한 관계이고, M(MultiP)와 PrinterA의 관계는 간접적으로 구현한 관계이므로 모두 True이다.
Abstract Class
하나 이상의 추상메소드를 갖는 클래스를 가리켜 추상 클래스(Abstract Class)라고 한다.
package interFaces;
public abstract class Abst {
public void methodOne(){
System.out.println("첫번째 메소드야");
}
// 하나 이상의 추상 메소드
public abstract void methodTwo();
}
class AbstExtends extends Abst{
@Override
public void methodTwo() {
System.out.println("구현을 해야만 해");
}
}
추상 클래스를 선언하려면 클래스의 선언부에 abstract 키워드를 추가 해야한다. 일반 클래스와 인터페이스를 섞어놓은 듯한 느낌이 든다. 상속받는 클래스는 반드시 구현을 해야만 한다.
'Language > Java' 카테고리의 다른 글
[Java] Optinal 클래스 사용해보기 (0) | 2024.03.13 |
---|---|
[Java] Collection Framework 총 정리 (1) | 2023.12.26 |
[Java] InterFace 정리(1) (0) | 2023.07.17 |
[Java] 자바 상속 정리 (0) | 2023.07.14 |
[Java] foreach문 사용하기 (0) | 2023.07.12 |