<override>
부모로부터 상속받은 메서드의 내용을 재정의하는 것
1. 선언부가 부모 클래스의 메서드와 일치해야 함
2. 접근 제어자를 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없음.
3. 예외는 부모 클래스의 메서드보다 많이 선언할 수 없다.
★override할 함수 위에 @Override 라고 써준다 (annotation)
이유 : 자바가 override 되고 있는지 체크해줌 (?)
<super>
super와 super()
super : this와 비슷하게 부모클래스의 멤버를 참조할 수 있는 키워드. 그냥 부모를 가리킨다고 보면 된다.
super() : super가 부모 클래스의 이름이니까, super()는 부모클래스의 생성자를 호출함.
==>자식클래스는 생성될 때, 부모클래스들이 같이 생성되면서 하나로 합쳐지게 되기 때문에, 자식클래스의 생성 자에서는 부모클래스의 생성자가 첫줄에 호출되어야함. 만약 안써주면 컴파일러가 부모의 기본생성자 추가
<다형성>
부모타입 변수 = 자식타입객체; 는 자동으로 부모타입으로 변환이 일어난다.
==> Map<String> strMap = new HashMap<>() 자식클래스의 생성자로 부모클래스를 생성
==> 자식은 부모의 모든 멤버를 가지고있기 때문으로 생각하기
Hobby hobby = new Hobby(Sports sport1) 이런식으로 Hobby의 생성자가 Sports 타입을 받아야한다고 할때,
이 대신 Sports를 상속받은 Sportsclimbing을 넣어주면 이것이 부모클래스로 자동 형변환이 일어나면서 Hobby를 생성할 수 있는 것이 다형성이다. 이 때, 자식클래스에서 override한 내용을 가지고 가서 형변환이 일어나기 때문에 결국 들어가는 자식 인스턴스의 속성에 따라 부모클래스의 내용이 바뀌므로, Hobby의 내용이 다양해질 수 있다.
=> 다형성 기능으로 인해서 클래스 객체의 원래 클래스명을 체크할 필요가 있을 수 있다. 이때 사용하는 것이
instance of
대상객체 instance of 클래스이름 ===> boolean을 return해줌. (자기부터 부모클래스들은 다 true를 return)
'공부 > Java' 카테고리의 다른 글
Java - 오류 및 예외 처리 // 예외 클래스 구조 // 제네릭 문법 (0) | 2023.04.07 |
---|---|
Java 문법 (3) - 생성자 // 제어자 // getter, setter // 상속 // 추상화 //인터페이스 // (0) | 2023.04.05 |
Java문법 (2) - 클래스 // 객체 // 메서드 (0) | 2023.04.05 |
Java 문법 - 연산자 // 반복문 // 배열 // 컬렉션 (0) | 2023.04.04 |
Java 개요 // JVM // 저장공간 // 변수와 상수 // 형변환 (0) | 2023.04.03 |