티스토리 뷰

Java

자바 인터페이스와 상속 정리

deerfrd 2017. 2. 6. 13:08


인터페이스 - implements로 부름

상속할 클래스(부모클래스) - extends로 부름


------------------------------------------------------------------

[CASE 1] - 자식클래스가 1개인 경우! (여기서 자식클래스는 클래스B를 말함)


1) 부모클래스 A

public class A {

public String name;


public String setName(String name) {

this.name = name;

}

}


2) 인터페이스 B

public interface B {

public String getName(); //안에 구현내용이 없는 메소드 선언했음 -> 이건 B라는 인터페이스를 implements 하는 클래스에서 구현내용을 정의해줘야함

}


3) A 클래스를 상속받고, B 인터페이스를 사용하는 클래스 C

public class C extends A implements B {

public String getName() {

return this.name; // 바로 여기서 위에 인터페이스에서 선언만하고 정의내용은 없는 getName을 정의해줌.

}

}


------------------------------------------------------------------

[CASE 2] - 자식클래스가 2개인 경우 (클래스 C,D)


1) 부모클래스 A

public class A {

public String name;


public String setName(String name) {

this.name = name;

}

}


2) 인터페이스 B

public interface B {

public String getName(); //안에 구현내용이 없는 메소드 선언했음 -> 이건 B라는 인터페이스를 implements 하는 클래스에서 구현내용을 정의해줘야함

}


3) A 클래스를 상속받고, B 인터페이스를 사용하는 클래스 C - 첫번째 자식클래스

public class C extends A implements B {

public String getName() {

return this.name; // 바로 여기서 위에 인터페이스에서 선언만하고 정의내용은 없는 getName을 정의해줌.

}

}


4) A 클래스를 상속받고, B 인터페이스를 사용하는 클래스 D - 두번째 자식클래스

public class D extends A implements B {

public String getName() {

return this.name; // 바로 여기서 위에 인터페이스에서 선언만하고 정의내용은 없는 getName을 정의해줌.

}

}


--> 그런데 여기서 보면, 클래스 C 와 D는 똑같이 A 클래스를 상속받으면서도 getName() 이라는 메소드 선언, 정의를 각 각 따로따로 함. --> 이것을 공통적으로 사용하기 위해 부모클래스인 클래스 A에 getName 이라는 메소드를 정의해주면, 훨씬 효율적이게 됨.

------------------------------------------------------------------

[CASE 3] - 자식클래스들에게 공통된 메소드를 선언 및 정의해야 하는 경우. (부모클래스에 해주면됨)


1) 부모클래스 A

public class A {

public String name;


public String setName(String name) {

this.name = name;

}


public String getName() {

return this.name; // 여기에 이렇게 하나만 선언,정의 해주면 효율적임.

}

}


2) 인터페이스 B

public interface B {

public String getName(); //안에 구현내용이 없는 메소드 선언했음 -> 이건 B라는 인터페이스를 implements 하는 클래스에서 구현내용을 정의해줘야함

}


3) A 클래스를 상속받고, B 인터페이스를 사용하는 클래스 C - 첫번째 자식클래스

public class C extends A implements B {

// 원래 getName() 메소드를 선언 및 정의해뒀지만, 부모클래스인 A 클래스에 공통적으로 선언해줘서 여긴 해줄필요 없어짐

}


4) A 클래스를 상속받고, B 인터페이스를 사용하는 클래스 D - 두번째 자식클래스

public class D extends A implements B {

// 원래 getName() 메소드를 선언 및 정의해뒀지만, 부모클래스인 A 클래스에 공통적으로 선언해줘서 여긴 해줄필요 없어짐

}



'Java' 카테고리의 다른 글

메소드에 변수값을 전달 vs 객체 자체를 전달  (0) 2017.02.06
자바 추상클래스, 추상메소드  (0) 2017.02.06
접근제어자  (0) 2017.02.06
자바의 생성자 (constructor)  (0) 2017.02.06
자바 기초  (0) 2017.02.06
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함