2022년 1월 10일 추움💠
프롤로그
오늘은 상속/오버라이딩/인터페이스/다형성에 관해서 배웠습니다. 머릿속에서 둥둥 떠다니는 느낌,,,복습해서 최대한 이해해보도록 하겠습니다.
상속
- 객체 지향 프로그램에서 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있습니다.
- 상속은 코드의 중복을 줄여줍니다.
- private 접근자 : 다른 클래스 상속 불가
- default 접근자 : 다른 패키지에 존재한다면 상속 불가
- 상속을 이용하면 클래스의 수정을 최소화하기 때문에 유지보수에 효율적
class 자식클래스 extends 부모클래스 {
}
- 자바는 다중상속을 허용하지 않는다.
오버라이딩 (Overriding)
overloading 과 overriding 개념 차이 면접에서 기본적으로 묻는 질문
오버로딩 : 하나의 클래스에 같은 이름의 메소드를 여러개 정의하는 것
- 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것
타입변환과 다형성
- 클래스 타입도 타입 변환이 있다.
- 자식타입은 부모타입으로 자동 타입 변환이 가능하다.
- 다형성 : 동일한 타입을 사용하지만 다양한 결과가 나오는 성질
- 필드의 다형성
: 필드의 타입은 변함이 없지만 실행 도중에 어떤 객체를 필드로 저장하느냐에 따라 실행 결과가 달라질 수 있는 것
- 매개 변수의 다형성
: 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록하는것
추상클래스
- 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스
- 추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없다.
<추상 클래스 용도>
- 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적
- 실체 클래스를 작성할 때 시간 절약
인터페이스
public interface 인터메이스명 { }
- 클래스는 필드, 생성자, 메소드를 구성멤버로 가지는데 비해 인터페이스는 상수와 메소드만을 구성 멤버로 가진다.
- 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다.
- 구현 클래스
public class 구현클래스명 implements 인터페이스명 {
}
- 다중상속은 불가하지만 다중 인터페이스는 구현할 수 있다.
<예제>