상속(Inheritance)
- 실체에 대한 추상화 과정을 거쳐 클래스를 정의하고 난 후, 공통점을 가진 클래스들을 모아서 부모와 자식의 관계를 도출하는 과정
- 부모 클래스는 자식에게 자신이 가지고 있는 자료, 메소드를 상속할 수 있음
- 코드의 재사용성, 중복을 최대한 줄여 효율적인 프로그래밍 구현
- 상속의 관계는 extends 키워드를 사용하여 구현함
1) 상속과 생성자
- 상속 구조에서는 자식을 통해 부모가 생성되어지는 경우 부모의 생성자가 먼저 호출됨
- 명시적으로 부모의 생성자를 호출할 경우에는 super() 메소드를 사용. super() 메소드는 반드시 첫 번째 줄에서 호출되어야 함!
2) 자료(Field)/메소드의 재정의(Overriding)
- 오버라이딩: 부모가 가지고 있는 자료나 혹은 메소드를 그대로 상속받아 사용하는 것. 상속받는 자료나 메소드는 동일한 형태로 구현해야함
➙ String의 equals() 메소드는 String의 부모인 Object 클래스에서 상속받은 것이다.
- 오버라이딩은 보통 메소드의 오버라이딩을 의미
➙ 부모가 가진 메소드를 오버라이딩한다는 것은 부모가 가진 로직을 실행한다는 것에 의미가 있는 것이 아니라 부모가 가진 메소드의 이름을 물려주는 것에 의미가 있다. 부모가 가지고 있는 메소드의 이름을 알고 있으면 자식들의 메소드도 그 부모의 메소드 이름을 통해 접근할 수 있다.
➙ 자식에게 물려주는 메소드는 이름만 있으면 된다. 자식들은 알아서 오버라이딩된 자신의 메소드의 바디(실행로직)를 쓰기 때문이다. 따라서 부모의 바디를 지워주고 이름만 남기면 되는데, 이때 바디가 없는 메소드는 실행될 수 없기 때문에 앞에 abstract를 붙여 추상메소드로 만들어줘야한다. 추상메소드를 하나라도 가지고 있는 클래스는 abstract를 붙여 추상클래스로 만들어줘야하며, 추상클래스는 자기 스스로 new로 객체를 생성할 수 없다!! 자식을 통해서는 객체생성 가능! 기능통일! 부모의 메소드를 실행할 가능성은 거의 없음!
3) 추상 메소드 / 추상 클래스
- abstract 키워드가 붙으며 상속하는 메소드를 반드시 오버라이딩 하도록 명시함
- 추상 메소드는 메소드의 바디({})가 없으며 리턴타입, 메소드명, 인자값만을 정의한 형태임
예) void draw();
- 추상 메소드를 하나라도 포함하고 있는 클래스는 abstract 클래스가 됨
- 추상 클래스는 new 연산자를 이용하여 객체 생성이 불가능함
4) 클래스 간의 형변환
- 상속관계에서만 가능
- 부모의 타입으로 정의하고 자식의 모습으로 생성을 하는 경우 묵시적 형변환이 일어남
- 자식의 타입으로 정의하고 묵시적인 형변환을 통해 생성된 객체를 저장하고자 할 때 명시적 형변환이 일어남
- 자식의 모습으로 정의하고 부모의 모습으로 생성하는 것은 절대 불가능!
'백엔드 > Java' 카테고리의 다른 글
[Java] ImageIcon의 이미지 크기 변경하기 (0) | 2021.03.25 |
---|---|
[Java] 인터페이스(interface) (0) | 2021.03.16 |
[Java] 배열 (0) | 2021.03.09 |
[Java] 조건문, 반복문 (0) | 2021.03.09 |
[Java] 연산자 (0) | 2021.03.09 |