상속은 자바를 하지 않아도 객체지향 언어의 핵심 개념입니다. 개발자라면 '아니 왜 필요한데?' 라는 의문을 가져야합니다.
핵심부터 말하자면, 상속은 코드 중복을 제거하여 클래스를 간결하게 구현할 수 있게한다.
자바 클래스는 다중 상속을 지원하지 않는다
자바는 상속의 횟수에 제한을 두지 않는다.
최상위 클래스는 java.lang.Object 이다.
슈퍼클래스에 대한 접근 지정자👇
슈퍼클래스의 멤버에 대한 서브클래스 접근 👇
Person p = new Student();
위와 같이 Student 객체는 Person 타입으로 업캐스팅이 된다면, Person 타입의 객체로 취급되어 Student 객체의 필드나 메소드에 접근할 수 없게 된다.
업캐스팅은 명시적으로 타입을 변환하지 않아도 되기때문에 Student 객체는 Person의 객체를 가지고 있기 때문이다.
🙋 좀 헷갈리는데요..?
🤖 Student는 Person이 아닌가요?
🙋 학생도...인간이죠..?
🤖 그렇다면 Person은 모두 Student 인가요?
🙋 아니요...?
🤖 그러니까 Student는 Person에서 추가적인 "조건" 이 필요합니다.
🙋 그래서요..?
🤖 (ㅂㄷㅂㄷ) 자 10짜리 바구니에 100의 물을 뿌리면 어케됨?
🙋 10의 바구니가 가득 차겠죠..?90은 못담겠지만..
🤖 그러니까 가득찬 바구니는 사용이 가능한거죠.
Student s = (Student)new Person();
위는 반대로 다운캐스팅이 된다면, Student 레퍼런스를 리턴하면서 Person도 Student에 접근이 가능하게 됨.
타입에 따른 분류 👇
선언 위치에 따른 분류 👇
static 예약어 👇
final 예약어 👇
final이 붙은 변수는 단 한번만 초기화가 가능하고 그 후에는 값을 변경할 수 없는 상수를 의미한다.
변수에 붙으면 상수가 도고 메서드 앞에 붙으면 오버라이딩이 금지되며 클래스는 상속을 금지시킨다.