반응형
어쩌다가 interface까지 왔다..
자바에서는 다중상속을 금지 한다.
두놈한테서 상속을 받는데 그 중에 한 놈이 똑같은 메소드 이름을 오버라이딩 해서 쓸 경우
어떤놈을 상속받아서 구현해야 하는지 골치 아프기 때문에 아예 막아 버렸다고 한다.
하지만 인터페이스는 다중 상속이 가능하다.
.... 왜냐 인터페이스에서는 선언만 해 두지 로직을 구현하지 않기 때문이다.
인터페이스 선언 구문
구현할때
써먹을때
인터페이스에 선언된 것들은 abstract로 선언되어 지기 때문에 implement 할 경우 무조건 기술해 줘야 한다.
인터페이스 만들때 메소드 앞에다가 굳이 abstract 라고 쓰지 않아도 컴파일 단계에서 친절하게도 자동으로 붙여 준단다.
그리고 데이터 필드는 선언 할 수 없지만 상수값을 지정할 수는 있다.
final static 을 붙여서 말이지..
.. 근데 여전히 이해가 잘 되지 않는다.
로직도 없는 놈을 상속해서 어따 쓸려구...ㅡ.ㅡ
그냥 일일이 선언하기 귀찮으니까 인터페이스로 공통된 기능을 뽑아서 만든 것인가??
도데체.. 왜 인터페이스를 쓰는 것인가...??!! 바보같은 물음인가....
시원하게 왜 쓰는지 알고 싶다.... 아 덴장 -_-;; 멀고도 험난한 길이군 ~
자바에서는 다중상속을 금지 한다.
두놈한테서 상속을 받는데 그 중에 한 놈이 똑같은 메소드 이름을 오버라이딩 해서 쓸 경우
어떤놈을 상속받아서 구현해야 하는지 골치 아프기 때문에 아예 막아 버렸다고 한다.
하지만 인터페이스는 다중 상속이 가능하다.
.... 왜냐 인터페이스에서는 선언만 해 두지 로직을 구현하지 않기 때문이다.
인터페이스 선언 구문
interface MyInter {
final static byte TEST_VAL = 1;
void testMeth(String birth, String phone);
void test2();
void test2();
}
구현할때
class TestInter implements MyInter {
String name;
String addr;
String birth;
String phone;
byte val;
TestInter(String name, String addr) {
String addr;
String birth;
String phone;
byte val;
TestInter(String name, String addr) {
this.name = name;
this.addr = addr;
this.addr = addr;
}
public void testMeth(String birth, String phone){
public void testMeth(String birth, String phone){
this.birth = birth;
this.addr = phone;
this.addr = phone;
}
public void test2(){
public void test2(){
if( TEST_VAL == 1 ) {
System.out.println("test!!");
}
}
}
}
써먹을때
public class Test {
public static void main(String[] args) {
TestInter ti = new TestInter("Kei","Andromeda");
ti.testMeth("1912", "0191234567");
ti.test2();
printTest(ti);
TestInter ti = new TestInter("Kei","Andromeda");
ti.testMeth("1912", "0191234567");
ti.test2();
printTest(ti);
}
static void printTest(TestInter ti2){
System.out.printf("%s %s %s %s", ti2.name, ti2.addr, ti2.birth, ti2.phone);
}
static void printTest(TestInter ti2){
System.out.printf("%s %s %s %s", ti2.name, ti2.addr, ti2.birth, ti2.phone);
}
}
인터페이스에 선언된 것들은 abstract로 선언되어 지기 때문에 implement 할 경우 무조건 기술해 줘야 한다.
인터페이스 만들때 메소드 앞에다가 굳이 abstract 라고 쓰지 않아도 컴파일 단계에서 친절하게도 자동으로 붙여 준단다.
그리고 데이터 필드는 선언 할 수 없지만 상수값을 지정할 수는 있다.
final static 을 붙여서 말이지..
.. 근데 여전히 이해가 잘 되지 않는다.
로직도 없는 놈을 상속해서 어따 쓸려구...ㅡ.ㅡ
그냥 일일이 선언하기 귀찮으니까 인터페이스로 공통된 기능을 뽑아서 만든 것인가??
도데체.. 왜 인터페이스를 쓰는 것인가...??!! 바보같은 물음인가....
시원하게 왜 쓰는지 알고 싶다.... 아 덴장 -_-;; 멀고도 험난한 길이군 ~
반응형
댓글