본문 바로가기

JAVA/상속

상속(inheritance)

기본특징

 

- 상속은 부모클래스의 속성을 자식클래스에게 물려주는 것을 말한다

- 상속을 사용하게 되면 코드 재사용성이 높아져 개발시간을 절약해줄 수 있고 효율적인 작업을 할 수 있게 해준다

- private접근 제한을 갖는 필드와 메소드는 상속이 불가능하다

- 부모클래스와 자식클래스가 서로 다른 package에 존재한다면 default 제한을 갖는 것들 또한 상속에서 제외된다

- 자바는 다중상속을 허용하지 않는다

 

기본공식

public class benz extends Car

 

생성원리

 

- 자식객체를 생성하면 부모객체가 먼저 생성되고 자식 개체가 생성된다

- 눈에 보이지는 않지만, 자식생성자가 생성될 때 맨 첫 줄에서 super()로 호출된다

- 부모클래스에 기본생성자가 없고, 매개변수를 받는 생성자가 있다면 그 자식 클래스에서는 super(매개변수1, 매개변수2)로 부모클래스의 생성자를 호출해야한다 

 

public class Human{
  public String name;
  public int phone;
  
  public Human(String name, int phone){
    this.name = name;
    this.phone = phone;
  }
}

public class Man extends Human{
  public String Army;
  
  public Man(String name, int phone, String Army){
    super(name, phone); 
    //super부분을 작성하지 않으면 오류가 발생한다.
    //부모의 기본생성자가 존재하지 않으니 명시적으로 다른 생성자를 호출해야하기 때문이다.
    this.Army = Army;
  }
}

 

Override

 

-  부모클래스에서 상속받은 메소드를 자식클래스에서 수정하여 사용할 수 있는 기능을 Override라고 한다

- 오버라이딩 된 메소드를 자식객체에서 호출하면 자식객체에서 수정된 메소드가 호출된다

- 어노테이션을 붙이면 컴파일러가 체크를 해줘서 오류발생을 줄일 수 있다 

 

 

조건

  • 부모와 동일한 리턴 타입, 메소드 이름을 가져야한다
  • 접근제한이 더 강해질 수 없다(ex)public이 private로 간다던지)
  • 새로운 예외 throws 불가

자식클래스에서 부모클래스 메소드를 오버라이딩 하더라도 부모클래스의 원래 메소드를 호출해야하는 경우가 필요할 때가 있다. 그럴때는 

super.메소드이름();

 의 형식으로 호출하면 된다. 

 

final

- 상수의 의미를 지니고 있으며 변할 수가 없다는 뜻을 가지고 있다.

- 부모클래스가 될 수 없기에 자식클래스를 만들 수 없다

- final 키워드 메소드는 오버라이딩할 수 없다 

ex) String , 사용자가 final로 명시한 클래스 등 

'JAVA > 상속' 카테고리의 다른 글

JAVA(2022.05.06)-this,메소드오버로딩,패키지,상속  (0) 2022.05.06