- 객체지향 프로그래밍에서는 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다.
- 장점
- 유지보수가 쉬워짐
- 확장성이 용이해짐
- 재사용이 가능해짐
- 코드가 간결해짐
- 개발 시간을 단축할 수 있음
- 자바의 상속 방식
- 클래스 간의 상속은 여러 개의 부모의 정보를 상속하는 다중 상속 방식을 제외하고는 모두 허용하고 있다.
- 자바 상속 방법(Extends)
//부모 클래스 생성 class 부모{ } //부모 클래스 상속 class 자식 extends 부모{ }
- 부모 클래스의
private
접근 제한을 갖는 필드 및 메소드는 자식이 물려받을 수 없다.
- 부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의
default
접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없다.
super 키워드
- 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수다.
super
키워드는 자식 클래스에서 부모 클래스를 가리킬 때 사용하는 키워드다.- 부모 클래스의 멤버와 자식 클래스의 멤버 이름이 같을 경우
super
키워드를 사용하여 구별할 수 있다.- 👉 부모 클래스의 멤버에 접근할 때 사용 !
사용 예시
class Parent { int a = 10; } class Child extends Parent { void display() { System.out.println(a); System.out.println(this.a); System.out.println(super.a); } } public class Inheritance02 { public static void main(String[] args) { Child ch = new Child(); ch.display(); } } --------- 실 행 결 과 --------- 10 10 10
super() 메소드
this( )
메소드가 같은 클래스의 다른 생성자를 호출할 때 사용된다면,super( )
메소드는 부모 클래스의 생성자를 호출할 때 사용된다.- 부모 클래스의 멤버를 초기화하기 위해서는 자식 클래스의 생성자에서 부모 클래스의 생성자까지 호출해야 한다.
- 만약 자식 클래스의 생성자에 부모 클래스의 생성자가 지정되어 있지 않다면, 컴파일러가 자동으로 부모 클래스의 기본생성자를 호출한다.
(이 경우에 부모클래스에 매개변수가 있는 생성자만 있고, 기본생성자가 없어 기본생성자를 호출할수 없다면 "에러"가 발생합니다.)super(); //이렇게 사용하면 된다!
사용 예시
class Parent { int a; Parent() { a = 10; } Parent(int n) { a = n; } } class Child extends Parent { int b; Child() { super(); b = 20; }
- super( )는 생성자 코드 안에서 사용 될 때, 다른 코드에 앞서 첫 줄에 사용되어야 한다.
- 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 한다.
- 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해줍니다.
- 즉, 반드시 사용되어야 하는 메소드를 추상 클래스에
추상 메소드
로 선언해 놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시재정의
해야 한다.abstract class 클래스이름 { ... abstract 반환타입 메소드이름(); ... }
- 추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로,
인스턴스
를 생성할 수 없다.- 추상 클래스는 먼저
상속
을 통해 자식 클래스를 만들고, 만든 자식 클래스에서 추상 클래스의 모든 추상 메소드를 오버라이딩하고 나서야 비로소 자식 클래스의 인스턴스를 생성할 수 있게 된다.- 추상 메소드를 선언하여 사용하는 목적은 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함이다.