오버라이드란? 다형성이란? 오버로딩과 오버라이딩의 차이점

Noome_·2022년 4월 28일
0
post-thumbnail

오버라이드

(1) 개념
부모클래스의 메서드를 재정의 하는 것.
부모클래스 타입으로 자식 클래스 타입의 객체를 받을 수 있다.

(2) @Override를 작성하는 이유?(오버라이드 어노테이션) @Override를 쓰든 안 쓰든 상관은 없지만, 오버라이딩 했다는 것을 협업하는 사람에게 알려주려고 또는 컴퓨터에게 에러판단 맡기려고 써주는 것을 지향하는 것이 좋다.

(3) 오버라이딩 성립조건? (5가지)
오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야한다.

*오버라이딩 == 메소드 바디를 다시 작성하는 것 , 메소드의 바디를 구현하는 것

*메소드 시그니처 (==메소드 헤드) 부분이 같으면 된다.

*접근제한자, 리턴타입, 메소드이름, 매개변수, 예외던지는 거-예외처리(총5가지가 메소드시그니처)

*접근제한자는 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.

*예외처리는 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

오버라이드와 오버로딩의 차이점 (매우매우 면접 단골질문 ..^^)

사실 두개는 완전히 다르다. 하지만 오버라는 단어가 겹쳐져서 사람들이 자바를 처음 배울 때 혼동을 겪는 것 같다. 나처럼,,

오버라이딩 !!!!!!!!
메소드 재정의
→ 기존 조상으로부터 상속받은 메서드의 내용만을 변경하는 것, 상속과 관련 ㄴㄴ

오버로딩 !!!!!!!!
매개변수를 다르게 하여 메소드를 여러개 사용하는 것
→ 기존에 없는 새로운 메서드를 정의 하는 것, 상속과 관련 ㅇㅇ

다형성?

다형성이란 조상타입의 참조변수로 자손타입의 객체를 다루는 것이다. 즉 ‘여러가지 타입을 한가지 타입으로 처리할 수 있는 기술’을 의미하며, 자바에서는 한 타입의 참조변수로 여러타입의 객체를 참조할 수 있도록 하였다. 즉, 부모클래스 타입의 참조변수로 자식클래스의 인스턴스를 참조할 수 있다.

생성한 인스턴스를 다루기 위해, 인스턴스의 타입과 일치하는 타입의 참조변수만 사용하기도 하지만, 상속관계의 클래스에서는 자식클래스타입의 인스턴스를 생성할 때, 부모클래스 타입의 참조변수를 사용할 수 있다.

반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조하는 것은 불가능하다. 그 이유는 참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버개수보다 같거나 적어야 하기 때문이다. 즉, 자손타입의 참조변수로 조상타입의 인스턴스를 참조하는 것은 존재하지 않는 멤버를 사용하고자 할 가능성이 있기 때문이다.

Car rc = new RedCar("빨강", 100, 3000);

이런식으로 부모타입의 참조변수로 자식타입의 객체를 사용할 수 있는데, 이때 바인딩과 연관이 있다.

정적바인딩(메인메소드 실행되기 전 연결상태),
동적바인딩(실제 런타임에서 바인딩 되는 것)

때문에 실행 이후에는 동적바인딩으로 RedCar 클래스의 start가 실행이됨.

profile
철수네 개발자

0개의 댓글

관련 채용 정보