반응형
extends
상속의 대표적인 형태이며 부모의 메서드를 그대로 사용할 수 있고 Overriding 없이 부모에 구현되어 있는 메서드를 직접 사용할 수 있다.
즉, extends 뒤에 원하는 클래스를 명시하게 되면 해당 클래스의 프로퍼티와 메서드를 따로 구현할 필요없이 인스턴스에서 자유롭게 사용 가능하다.
상속의 말 그대로 부모의 것을 자식이 물려받아 사용하는 것과 같다고 보면 될 것 같다.
코드로 예를 들면
// 부모 클래스
class Parent {
protected string lastName = "Jung";
public string getLastName() {
return lastName;
}
public void setLastName(string lastName) {
this.lastName = lastName;
}
}
//자식 클래스
class Child extends Parent {
public void printLastName() {
System.out.println(lastName);
}
}
public class ExtendsExample {
public static main (String[] args) {
Child child = new Child();
System.out.println(child.getLastName());
child.printLastName();
}
}
Child라는 클래스는 Parent를 상속 받고 getLastName() 메서드로 lastName을 출력한다. extends를 사용했기 때문에 getLastName 메서드에서 lastName을 바로 사용하였다.
여기서 implements와의 차이가 Java에서는 부모 클래스를 두 개 이상 가질 수 있는 다중상속을 지원하지 않는데 이 때문에 다중상속을 대신할 implements가 등장하게 된다.
implements
interface TestInterface {
public static int num = 7;
public void fun1();
public void fun2();
}
class InterfaceExample implements TestInterface {
@Override
public void fun1() {
System.out.println(num);
}
@Override
public void fun2() {
}
}
public class InterfaceSample {
public static void main(String args[]) {
InterfaceExample example = new InterfaceExample();
example.fun1();
}
}
implements는 부모의 메서드를 반드시 오버라이딩(Overriding) 즉, 재정의해야 한다는 것이 가장 큰 특징이다.
또한,
public class Child implements Father, Mother{
...
}
와 같이 다중상속을 대신하는 역할을 한다.
메소드를 재정의한다는 면에서 '상속'의 본래 의미와는 다를 수 있겠지만 Java와 C#에서의 상속의 개념은 계약 및 분류의 의미가 강하기 때문에 상속으로 볼 수 있다고 한다.
다시 정리하다면,
- extends는 일반 클래스와 추상 클래스(abstract) 상속에 사용, implements는 인터페이스 상속에 사용
- 클래스가 클래스를 상속받을 때는 extends 사용, 인터페이스가 인터페이스를 상속 받을 때도 extends 사용
- 클래스가 인터페이스를 사용할 때는 implements 사용하지만 인터페이스가 클래스를 사용할때는 implements 사용 불가
- extends는 클래스 하나만 상속 받을 수 있음
- implements는 여러 개 사용 가능
- implements는 설계 목적으로 구현 가능
- implements한 클래스는 implements의 메서드를 모두 사용해야 함
- 인터페이스와 클래스의 차이는 인터페이스는 정의한 메소드를 구현하지 않아도 되지만 인터페이스를 상속받는 클래스는 인터페이스에 정의된 메소드를 구현해야 함
참조 글
https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4
반응형
'Java' 카테고리의 다른 글
| 문자열 비교 - Equals() 와 == 연산자의 차이 (0) | 2024.01.09 |
|---|---|
| Spring과 Spring Boot (0) | 2023.08.07 |
| Java의 Annotation (0) | 2023.08.07 |