상속이란?
자바에서 상속이란 부모클래스와 자식 클래스 간의 관계를 의미하는데 extend키워드를 사용하여 자식 클래스가 부모클래스의 자원을 이용할 수 있다.
뿐만 아니라 자바는 다중상속을 지원하지 않지만 extend선언가능한 횟수에는 제한이 없다.
위 코드처럼 Pra클래스는 부모 클래스가 되고, ExPra클래스는 Pra클래스를 상속받은 자식클래스가 된다.
또한 @Override어노테이션을 이용하여 부모클래스의 메소드를 사용할 수 있다.
물론 자바의 모든 최상위 클래스는 Object클래스이다.
super vs this
super키워드 상속관계에서 부모클래스의 필드나 메소드를 참조하기 위해서 사용되는 키워드
Pra클래스 부모클래스와 Pra의 자식클래스인 ExPra가 있는데 ExPra클래스는 부모클래스의 메소드인
prasuper메소드를 오버라이딩 하였다.
여기서 super.prasuper(); 문장에서 super가 가리키는 것은 바로 ExPra의 부모클래스인 Pra클래스다.
위와 같이 super키워드를 사용하면 부모클래스의 메소드를 접근할 수 있다.
반면 this키워드는 무언가를 가리키는 역할을 하긴 하지만 다르다.
this부분은 아래의 블로그에서 확인할 수 있다.
https://wnstjr120422.tistory.com/16
<상속의 장점>
1. 소량의 코드로 새로운 클래스나 메소드를 정의할 수 있다.
2. 코드를 공통으로 관리하기 때문에 변경이나 추가가 간단하다.
3. 따라서 중복된 코드가 제거되기 때문에 유지보수에 편리하다.
<상속의 단점>
만약 상속구조가 복잡해지는 경우가 생기면 부모클래스의 변화가 하위클래스에게 미치는 영향을 파악하기
어렵다.
또한 상위클래스의 메소드나 특정부분에 오류가 발생한 경우 하위클래스가 정상적으로 작동을 못할수도 있다.
메소드 오버라이딩
부모 클래스로부터 상속받은 메소드를 자식클래스에서 재정의하여서 사용하는 것
위처럼 Pra부모클래스에 있는 메소드들을 자식클래스인 ExPra클래스에서 사용할 수 있는 것이
메소드 오버라이딩 이라고 한다.
또한 무조건 오버라이딩한 메소드의 내용이 달라도 상관없다.
왜냐하면 오버라이딩은 주로 부모클래스의 메소드 내용을 수정해야할 경우에 주로 사용하기 때문이다.
오버라이딩을 할 때 주의할 점은 부모클래스의 메소드 반환타입, 메소드명, 매개변수 갯수가 같아야한다.
위처럼 prasuper메소드를 보면 이름도 다르지만 매개변수의 갯수가 다르기 때문에 @Override어노테이션에 빨간줄이
그어지면서 오류가 발생하게된다.
@Override -> 개발자가 오버라이딩을 정확히 했는지 안 했는지 확인해주는 어노테이션
자식클래스인 ExPra클래스의 객체인 exPra를 선언하고 exPra를 통해서 메소드를 호출하였을 경우
부모 클래스의 메소드가 호출이 되는 것이 아니라 자식클래스에서 오버라이딩한 메소드가 호출이된다.
위와 같은 결과가 출력된다.
'JAVA' 카테고리의 다른 글
[JAVA] final 키워드 (0) | 2023.04.23 |
---|---|
[JAVA] 추상클래스란 (0) | 2023.04.23 |
[JAVA] 메소드(method)란? (0) | 2023.04.04 |
[JAVA] this키워드 (0) | 2023.04.04 |
[JAVA] 객체&생성자(new 키워드,빌더 패턴) (0) | 2023.04.03 |