[Week03 Day013][THU 12 MAY 2022]
상속(inheritance) 캡슐화(Encapsulation)
상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.
상속을 사용하는 이유
파이썬에서 했던 건데 너무 새롭다 파이썬 다 까먹었나봐
상속이라는 게 있었던 것만 희미하게 기억나.. ^^
class 새로작성하려는클래스명 extends 상속받고자하는클래스명 {}
class child extends parents {}
조상 클래스가 변경되면 자손 클래스는 자동적으로 영향을 받지만,
자손 클래스가 변경되는 것은 조상 클래스에 아무런 영향을 주지못함.
상속 관계 : "~은 ~이다."
포함 관계 : "~은 ~을 가지고 있다."
자바에서는 다중상속의 장점을 포기하고, 단일상속만을 허용한다.
클래스 간의 관계가 보다 명확해지고 코드를 더욱 신뢰할 수 있게 만들어준다.
Object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다.
조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 상속받은 메서드를 자손 클래스 자신에게 맞게 변경하는 것을 오버라이딩한다고 한다.
조상클래스의 메서드를 자손클래스에서 오버라이딩할 때
1. 선언부가 조상 클래스의 메서드와 일치해야함
2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경 불가
3. 예외는 조상 클래스의 메서드보다 많이 선언 불가
오버로딩 overloading : 기존에 없는 새로운 메서드를 정의하는 것 (new)
오버라이딩 overriding : 상속받은 메서드의 내용을 변경하는 것 (change, modify)
class Parent{
void parentMethod() {}
}
class Child extends Parent{
void parentMethod() {} // 오버라이딩
void parentMethod(int i) {} // 오버로딩
void childMethod() {}
void childMethod(int i) {} //오버로딩
void childMethod() {} //에러 중복 정의 되었음
super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변후이다. 멤버 변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 멤버와 이름이 같을 때는 super를 붙여서 구별할 수 있다.
조상 클래스와 자손 클래스에 동일한 이름의 변수가 있을 때 이를 구분하기 위해 super를 이용한다. 예를 들어 변수 이름이 x라면 자손 클래스에서 x, this.x, super.x 세가지는 모두 같은 변수를 의미한다.
조상 멤버와 자신 멤버를 구별하는데 사용된다는 점만 제외하면 this와 super는 근본적으로 같다.
this()처럼 super()로 생성자이다. this()는 같은 클래스의 다른 생성자를 호출하는데 사용되지만, super()는 조상의 생성자를 호출하는데 사용된다.
this는 자기 객체를 가리키는 참조변수
패키지란 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서롤 관련된 클래스들끼리 그룹단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다.
패키지 선언문은 반드시 소스파일에서 주석과 공백을 제외한 첫번째 문장이어야 하며, 하나의 소스파일에 단 한번만 선언될 수 있다.
접근 제어자를 사용하는 이유
//모든 내용은 코드스테이츠 학습 플랫폼과 자바의 정석 참고.. //