기본특징
- 상속은 부모클래스의 속성을 자식클래스에게 물려주는 것을 말한다
- 상속을 사용하게 되면 코드 재사용성이 높아져 개발시간을 절약해줄 수 있고 효율적인 작업을 할 수 있게 해준다
- 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 |
---|