package ex0726;
public class Ex02_interface {
public static void main(String[] args) {
// Demo2 dm = new Demo2(); // 컴파일 오류. 인터페이스는 추상 클래스의 일종으로 객체 생성 불가
// 인터페이스는 구현 클래스의 상위 클래스와 유사하다.
Demo2 dm = new DemoImpl2(); // up casting
dm.print();
dm.disp();
// dm.sub(); // 컴파일 오류.
// 구현 클래스에는 정의 되어 있지만 인터페이스에는 존재하지 않으므로
((DemoImpl2)dm).sub(); // down casting
System.out.println(Demo2.A);
// Demo2.B = 50 ; // 컴오류. 인터페이스에 정의된 필드는 final 이므로
}
}
// interface : 선언만 있고 정의가 없는 abstract 클래스의 일종
// 인터페이스 작성
interface Demo2 {
// 인터페이스 필드는 static final만 가능
public static final int A = 10;
int B = 20; // public static final을 붙이지 않아도 public static final
public void print(); // 메소드는 선언만 가능(abstract 메소드)
public abstract void disp(); // abstract 는 생략 가능
/*
public void sub() { // 메소드를 정의 하면 컴파일 오류가 발생
//
}
*/
}
인터페이스 클래스에서는 메소드를 대괄호를 넣어서 정의를 하면 안되고, 따옴표를 찍어서 ; 선언만 가능!!
// 인터페이스 구현
// 인터페이스를 구현한 클래스가 추상 클래스가 아닌 경우 인터페이스의 모든 메소드를 재정의 해야 한다.
class DemoImpl2 implements Demo2 {
@Override
public void print() {
System.out.println("print - 인터페이스 메소드 재정의...");
}
@Override
public void disp() {
System.out.println("disp - 인터페이스 메소드 재정의...");
}
public void sub() {
System.out.println("클래스에 정의된 메소드...");
}
}
인터페이스에서 선안된 메소드를 인터페이스를 구현한 클래스가 꼭 Override를 해야함!
'쌍용강북교육센터 > 7월' 카테고리의 다른 글
0726_Ex04_interface : 인터페이스 (0) | 2021.07.26 |
---|---|
0726_Ex03_interface 인터페이스 (0) | 2021.07.26 |
0726_Ex01_abstract : 추상 클래스 (0) | 2021.07.26 |
0723_Ex05_ClassTypeCast : 클래스 타입 캐스트 (0) | 2021.07.23 |
0723_Ex04_ClassTypeCast (0) | 2021.07.23 |