상속의 치명적 오해
코드의 재활용을 위한 문법이다 (X)
중요!
연관된 일련의 클래스들(다른 클래스들)에 대해 상속을 적용하면, 공통적인 규약/규칙을 정의/적용 할 수 있다. (O)
상속의 멤버 접근
class Man{
private String name;
void setName(String name){
this.name=name;
}
String getName(){
return this.name;
}
public void tellMyName(){
System.out.println("my name is "+ name);
}
}
멤버를 초기화할 때, 이상적인 원칙은 그 클래스의 멤버는 해당 클래스의 생성자에서 초기화시켜주는 것이다(생성자를 통한 초기화 원칙). 하지만 아래의 예제에서는 상위 클래스 Man의 멤버 변수 name을 초기화할 때 하위 클래스 안에서 초기화해주었다. 물론, 문제는 없지만 원칙에 어긋난 방법이다.
super은 상위 클래스의 생성자를 호출할 때 사용한다. super 덕분에 상위 클래스의 멤버는 상위 클래스가, 하위 클래스의 멤버는 하위 클래스가 초기화시킬 수 있게 됐다. 즉, 클래스의 멤버는 해당 클래스가 초기화 시켜주는 "생성자를 통한 초기화"을 지킬 수 있게 됐다.
자바는 다중 상속을 지원하지 않는다.
클래스 변수/메소드과 상속 관계
static 변수/메소드(클래스 변수/메소드)가 선언된 클래스에는 접근 권한이 있을 뿐 직접 가지고 있지 않다. 하위 클래스는 직접 상속 받지 않지만 접근할 권한은 가지고 있다. 부모가 가지고 있지 않으니 자식도 상속 받지 못한다고 생각하자.
instanceof
instaceof는 연산자이고 ref와 ClassName은 피연사자이다. ref는 특정 인스턴스를 참조하는 참조변수이다. 해석하면 ClassName형 참조변수로 ref가 가리키는 인스턴스가 참조 가능한지 여부를 묻는 것이다. 따라서, 참조 가능하면 true, 가능하지 않으면 false을 반환한다. 간단하게, 참조가능성을 묻는다고 생각하면 된다.
위의 코드를 상속의 오바라이딩 메소드를 이용하면 간략하게 코드를 줄일 수 있다.
상속은 연관된 일련의 클래스들에 대해 공통적인 규약을 정의할 수 있다.
'Programming > Java' 카테고리의 다른 글
JAVA 16 상속이 도움 되는 상황 (0) | 2021.08.04 |
---|---|
JAVA 15 오버라이딩 (0) | 2021.08.04 |
JAVA 13 1차원 배열의 이해와 활용 (0) | 2021.08.04 |
JAVA 12 toString 메소드 (0) | 2021.08.04 |
JAVA 11 오버로딩 (0) | 2021.08.04 |