[JAVA] 객체지향 프로그래밍(OOP) - 상속

2022. 9. 7. 15:26

상속(Inheritance)

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

상속을 활용하여 프로그래밍하면 코드의 중복을 줄이고 재사용성을 높여 유지보수에 기여한다.

상속받는 방법

class Parent{}

class Child extends Parent{}

상속받는 방법은 간단하다. 상속받을 클래스의 이름 뒤에 extends 키워드와 상위 클래스의 이름을 적어주면 된다.

상위 클래스 : Parent
하위 클래스 : Child
class Parent {
    int x = 1;
    int y = 2;
    static void print(){
        System.out.println("hello");
    }
}
class Child extends Parent {
    void printChild() {
        System.out.println("child");
    }
}
public class InheritanceTest {

    public static void main(String[] args) {
        Child c = new Child();
        System.out.println(c.x); //1
        System.out.println(c.y); //2
        Child.print(); //hello
        c.printChild(); //child
    }
}

실행결과에서 볼 수 있듯이 하위 클래스는 상위 클래스의 모든 멤버를 상속받고 하위 클래스에 정의한 메서드까지 사용할 수 있다. 공통적인 속성들을 모아 상위 클래스로 정의해서 관리하고 부가적으로 필요한 속성과 기능들을 하위 클래스에 따로 정의하면 각 클래스의 코드가 적어져서 관리하기가 쉬워진다.

 

상속의 특징

  • 하위 클래스는 상위 클래스의 모든 멤버를 상속받는다. (생성자는 제외)
  • 조상 클래스가 변경되면 하위 클래스도 영향을 받는다. (반대의 경우엔 영향을 받지 않는다.)
  • 하위 클래스의 멤버 개수는 상위 클래스의 멤버 개수보다 작지 않다 (같거나 많다)
  • 단일 상속만 가능하다.

메서드 오버라이딩

상위 클래스에서 상속받은 메서드의 내용을 변경하는 것

상속받은 메서드는 수정 없이 그대로 사용해도 되지만, 하위 클래스에서 용도에 맞게 변경해서 사용할 수 있다.

class Parent {
    void print(){
        System.out.println("parent");
    }
}
class Child extends Parent {
    void print() {
        System.out.println("child");
    }

}
public class InheritanceTest {

    public static void main(String[] args) {

        Child c = new Child();
        c.print(); //child
    }
}

오버로딩(Overloading)과 오버라이딩(Overriding)은 이름이 비슷하지만  둘은 완전히 다른 정의이다.

오버로딩(Overloading) 매개변수의 개수나 타입을 다르게 해서 새로운 메서드를 만드는 것 
오버라이딩(Overriding) 상위 클래스와 똑같은 메서드의 선언부를 갖고 바디의 내용을 다르게 재정의 하는 것 

오버라이딩(Overriding)의 조건

  1. 메서드의 선언부가 상위 클래스의 메서드와 일치해야 한다.
  2. 접근 제어자의 범위는 상위 클래스의 메서드보다 같거나 넓다.
  3. 상위 클래스의 메서드에서 선언한 예외보다 많이 선언할 수 없다.

 


Object 클래스

Object 클래스는 모든 클래스의 최상위 클래스이다.

class Parent {}

class Parent extends Object {}

상속받지 않는 클래스는 컴파일러에 의해 자동으로 Object 클래스를 상속받기 때문에 Object 클래스는 모든 클래스의 최상위 클래스라고 볼 수 있고 결과적으로 모든 클래스들은 Object 클래스의 멤버들을 상속받아 사용할 수 있다.

 

대표적으로 Object 클래스의 toString, equals, hashCode 메서드가 있고 필요에 따라서 override 해서 사용한다.

 

 

BELATED ARTICLES

more