티스토리 뷰

현실에서 상속은 부모가 자식에게 물려주는 행위를 말한다. JAVA에서도 부모클래스(상위클래스)의 필드와 메소드를 자식클래스(하위클래스)가 상속받아 자신의 것처람 사용할 수 있다.


상속의 방법은 클래스 선언시 다음과 같이 extends를 사용하면된다.

class 자식클래스 extends 부모클래스
  • 하나의 부모클래스는 여러개의 자식클래스를 가질수있지만 자식클래스는 하나의 부모클래스만 가질수 있다. (즉 자식클래스는 여러개의 클래스를 상속받지 못한다)
  • 자식클래스는 부모클래스가 될수있다. (A클래스를 상속받은 B클래스를 다시 C라는 클래스가 상속받은경우 C는 A의자원까지 사용할 수있다)
  • 상속으로 모든 필드와 메소드를 물려받는것이 아니라 private 접근제한을가진 자원은 제외된다.

그렇다면 자바에서 상속은 왜 사용할까?

 클래스를 재사용하여 중복을 줄일수 있다. (중복된기능은 상속받음)

 코드의 수정시 부모클래스의 코드만 수정만으로 모든자식 코드들까지 수정이되는 효과가 있다.


super

자바에서 자식객체를 생성하면 부모객체가 먼저생성되고 자식객체가 그 다음에 생성된다.  자식객체는 본인의 생성자의 가장 첫 줄에서 Super()메소드로 부모생성자를 호출한다.

  • this 자기자신을 지정하듯이 부모는 super로 호출 할 수 있다.
  • 부모의 메소드 호출시에는 super.메소드() 로 사용한다.


메소드 재정의(@Override)

자식클래스에서 부모클래스의 메소드를 재정의 하여 사용할 수 있다.

오버라이드 된 메소드를 호출시 부모클래스의 메소드가아닌 자식클래스의 메소드를 호출하게 된다.

  • 부모의 메소드와 동일한 형태를 가져야한다 (리턴타입, 메소드이름, 매개변수)
  • 접근 제한을 더 강하게 오버라이딩 할 수 없다.
class Parent {  //부모클래스
  void method1() { System.out.println("부모의 method1"); }
  void method2() { System.out.println("부모의 method2"); }
}

class Child extends Parent{  //부모클래스를 상속받은 자식클래스
  void method2() { System.out.println("자식의 method2"); }
  void method3() { System.out.println("자식의 method3"); }
}

class childExample{
  public static void main(String[] args){
    Child child = new Child();
    
    child.method1(); // 부모의 method1
    child.method2(); // 자식의 method2
    child.method3(); // 자식의 method3
  }
}

final클래스와 final메소드

final로 저징된 메소드는 자식클래스에서 오버라이드 할 수 없다.

클래스가 final로 저징되있다면 최종클래스라는 위미로 무보클래스가 될수 없어 자식 클래스를 만들 수 없다.

 public final class Mamber{ }  //상속할 수 없는 final 클래스


댓글