- 상속(Inheritance)이란?

  쉽게 말해서, 부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)가 있으며, 자식 클래스는 부모 클래스를 선택해서, 그 부모의 멤버를 상속받아 그래도 쓸 수 있게 된다. 즉, 상속은 이미 마련된 클래스를 재사용해서 만들 수 있기 때문에 효율적이게 코드를 관리할 수 있도록 한다. 상속을 하더라도 자식 클래스는 부모의 모든 것을 물려받는 것은 아니다

  - 부모 클래스의 private 접근 제한을 갖는 필드 및 메소드는 자식이 물려받을 수 없다.

  - 부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의 default 접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없다.

 

 - 클래스의 상속

  상속 받고자 하는 자식 클래스명 옆에 extends 키워드를 붙이고, 상속할 부모 클래스명을 적는다

public class Parent { ... }; // 부모 클래스
public class Child extends Parent { ... } // 자식 클래스

 - 부모 생성자의 호출: super(...);

 자바에서는 자식 객체를 생성하면, 부모 객체를 먼저 생성한 후, 자식 객체가 그 다음에 생성된다. 객체는 생성자 호출해야만 생성되는데, 일단 생성자는 '명시적인 생성자 선언'이 없다면, 컴파일러는 알아서 기본 생성자를 생성하여 호출한다. 그러나 자식 클래스에서 명시적 생성자 선언이 있다면, 자식 클래스 안의 생성자 선언 내부 맨 첫줄에 super(); 라고 생성하게 된다. 즉, super 키워드는 부모 클래스(객체)를 나타내는 것임을 기억하면 된다.

 

 - 오버로딩(Overloading)과 오버라이딩(Overridding) 

 (1)오버로딩(Overloading)

 오버 로딩은, 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있다고 하더라도, 매개변수의 개수나 타입이 다를때, 같은 이름을 사용해서 메소드를 정의할 수 있다. 즉, 같은 기능을 하지만, 매개 변수로 사용되는 데이터 타입이 달라도, 같은 이름을 사용하여 똑같은 기능을 할 수 있게 해준다. 단, 반환되는 값만 다르게 지정할 수 없다. 

 (2) 오버로딩을 사용하는 이유

  같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다. 즉, println이라는 메소드는 인자값으로 int, double, boolean, String 등, 다양한 타입의 매개변수를 넣을 수 있지만, 콘솔창에 출력하는 기능을 수행한다. 이것은 같은 기능을 가진 메소드를 println이라는 하나의 이름으로 정의 한 것이다. 즉, 오버로딩의 대표적인 메소드라고 볼수 있다.

 

 (3) 오버라이딩(Overriding)

  부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는 것을 오버라이딩이라고 한다. 상속받은 메소드를 그대로 사용할 수 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우, 오버라이딩 할 필요가 생긴다. 오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩 하고자 하는 메소드의 이름, 매개 변수, 리턴 값이 모두 같아야한다.

 

구분			Overriding			Overloading
---------------------------------------------------------------------------------------
접근 제어자		부모 클래스의 메소드의 		모든 접근제어자 사용가능
            		접근제어자보다 더 넓은 범위	
리턴형			동일해야 한다			달라도 된다
매소드명			동일해야 한다			달라도 된다
매개변수			동일해야 한다			달라도 된다
적용 범위		상속 관계			같은 클래스 내

+ Recent posts