티스토리 뷰
상속
상속이란? 부모가 가진것을 자식에게 물려주는것을 의미한다. is a 관계 혹은 kind of 관계라고 한다.
ex) public class Bus extends Car { ~ }
- 부모가 가지고 있는 메소드외에, 자식 클래스에서 추가로 메소드를 선언하는 것을 확장하였다고 표현한다.
접근제한자
접근 제한자란 클래스 내에서 멤버의 접근을 제한하는 역할을 한다.
cf) 캡슐화 : 관련된 내용을 모아서 가지고 있는것
종류
- public
- 어떤 클래스든 접근 가능.
- private
- 자기 자신만 접근 가능
default접근 지정자 (접근제한자를 적지 않으면 )
- 자기자신 + 같은 패키지 접근 가능
- protected
- 자기 자신 + 같은 패키지 + 상속받은 자식 클래스(서로 다른 패키지라고 하더라도) 접근 가능
추상클래스
추상 클래스란 구체적이지 않은 클래스를 의미한다. 독수리, 타조는 구체적인 새를 지칭하는데 새, 포유류 같은 것은 구체적이지 않다.
이런 것을 구현한 클래스를 추상 클래스라고 한다.
정의하기
- 추상 클래스는 클래스 앞에 abstract 키워드를 이용해서 정의한다.
- 추상 클래스는 미완성의 추상 메소드를 포함할 수 있다.
- 추상 메소드란, 내용이 없는 메소드 이다. 즉 구현이 되지 않은 메소드이다.
- 추상 메소드는 리턴 타입 앞에 abstract라는 키워드를 붙여야 한다.
- 추상 클래스는 독자적으로 인스턴스를 생성할 수 없다.
- 추상 클래스를 상속받은 클래스는 추상 클래스가 갖고 있는 추상 메소드를 반드시 구현해야 한다.
- 추상 클래스를 상속받고, 추상 클래스가 갖고 있는 추상 메소드를 구현하지 않으면 해당 클래스도 추상 클래스가 된다.
super(와 부모생성자)
class가 인스턴스화 될때 생성자가 실행되면서 객체의 초기화를 한다. 그 때 자신의 생성자만 실행이 되는것이 아니고, 부모의 생성자부터 실행된다.(부모의 생성자를 부르는 super()가 자신의 생성자에 숨겨져 있는 것. 이때, 부모 생성ㅈㅏ가 디폴트 생성자가 아닌 인자가 필요한 생성자라면, 자식 클래스에 강제적으로 super(인자) 를 작성해줘야한다.)
super
- 자신을 가리키는 키워드가 this 라면, 부모들 가리키는 키워드는 super
- super() 는 부모의 생성자를 의미한다.
- 부모의 생성자를 임의로 호출하지 않으면, 부모 class의 기본 생성자가 자동으로 호출된다.
부모의 기본생성자가 아닌 다른 생성자를 호출하는 방법 :
- 부모가 기본생성자가 없기 때문에 컴파일 오류가 발생하게 되는 것이다.
- 이런 문제를 해결하려면 자식 클래스의 생성자에서 직접 부모의 생성자를 호출해야 합니다.
오버라이딩(Overriding)
오버라이딩이란 부모가 가지고 있는 메소드와 똑같은 모양의 메소드를 자식이 가지고 있는 것이다. 즉 오버라이딩이란 메소드를 재정의(그 안의 내용만 재정의 가능하며 / 리턴타입과 매개변수타입 변경하거나 추가하는 것은 오버라이딩이 아니다.) 하는 것이다.
- 메소드를 오버라이드 하면, 항상 자식클래스에서 정의된 메소드가 호출된다.
- 오버라이딩 한다고 해서 부모의 메소드가 사라지는 것은 아니다.
- super 키워드를 이용하면, 부모의 메소드를 호출 할 수 있다.
- super 키워드를 이용하면, 부모의 메소드를 호출 할 수 있다.