<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)

 

 

 

+ Recent posts