[JAVA]상속

진섭·2023년 5월 11일
0
post-thumbnail

상속

자바의 정석 책과 멋쟁이 사자처럼에서 공부한 내용을 정리한 내용입니다.

 

상속이란?

상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.

그럼 왜 상속이 좋은가? 상속을 받아서 클래스를 작성하면 코드의 양이 줄어들고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 용이해 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.

그럼 상속은 어떻게 쓰는건가? 사용 방법은 간단하다. extends 키워드를 사용하면 된다.

class Child extends Parent{
	
}

단일 상속

c++ 에서는 여러 조상 클래스로부터 상속을 받는다고 한다. 하지만 자바에서는 단일 상속만을 허용한다. 그래서 하나 이상의 클래스로부터 상속을 받을 수 없다.

다중상속을 허용하면 여러 클래스로부터 상속받을 수 있기 때문에 복합적인 기능을 가진 클래스를 쉽게 작성할 수 있는 장점이 있지만 클래스간의 관계가 매우 복잡해진다는 것과 서로 다른 클래스로부터 상속받은 멤버간의 이름이 같은 경우 구별할 수 있는 방법이 없다는 단점이 있습니다.

자바에서는 이러한 다중상속의 단점을 해결하기 위해 다중상속의 장점을 포기하고 단일상속만을 허용합니다.

오버라이딩

쉽게 부모 클래스에서 메서드를 물려받으면 메서드의 내용을 자식 클래스에서 변경하는 것을 말한다.

오바라이딩의 조건은 다음과 같다.

자손 클래스에서 오버라이딩하는 메서드는 조상 클래스와 메서드와

  • 이름이 같아야 한다
  • 매개변수가 같아야 한다.
  • 반환타입이 같아야 한다.

오버로딩 vs 오버라이딩

이 부분은 오버로딩 부분에서 정리를 했지만 간단하게 다시 정리를 하자면

  • 오버로딩 : 같은 이름을 가진 메서드를 매개변수,타입등으로 구별해 만든다.
  • 오버라이딩 : 상속받은 메서드의 내용을 변경한다.

오버로딩은 만든다, 오버라이딩은 변경한다. 이렇게 생각해봅시다.

super,super()

super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수이다.멤버변수와 지역변수의 이름이 같을 때 this를 붙혀 구별을 했듯이 상속받은 멤버와 자식의 클래스에 저으이된 멤버의 이름이 같을 때는 super를 이용해 구별한다.

예제를 보면 바로 이해가 될 것입니다.

public class MainClass {

	public static void main(String[] args) {
		Child c = new Child();
		c.method();

	}

}

class Parent{
	int x=10;
}

class Child extends Parent{
	int x=20;
	
	void method() {
		System.out.println("x="+x);//Child의 멤버변수 x의 20이 출력됨
		System.out.println("this.x="+this.x);//Child에 선언된 멤버변수가 출력됨
		System.out.println("super.x="+super.x);//Parent에서의 멤버변수 x의 10이 출력됨
		
	}
}

이 예제를 통해 x, this, super가 서로 다른 값을 참조하는 것을 알 수 있었습니다.

super()

this()는 같은 클래스의 다른 생성자를 호출하는 데 사용되지만, super()는 조상 클래스의 생성자를 호출하는데 사용된다.

0개의 댓글