본문 바로가기
Java

extends와 implements

by invelog 2023. 8. 24.
반응형

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