일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 회고
- Oracle 유동아이피
- 간단한 CRUD 구현
- 회고록
- 웹 크롤러
- 국비지원
- CRUD 구현
- 국비 과정
- 생년월일 팝업 생성
- 팝업 생성
- 간단한 CRUD구현
- 데이터를 못 읽어오는 경우
- 국비과정
- jsp
- crud게시판
- 국비지원 후기
- 취업 후기
- Oracle 유동IP
- mariadb 서버 기본값 설정
- 국비 회고
- 게시판
- jQuery
- 잡다한 노트
- mariadb 접속오류
- 유동아이피를 고정하는 방법
- 파이널 프로젝트
- 간단한 CRUD 게시판
- CRUD 게시판
- 국비
- 아날로그 시계만들기
- Today
- Total
우당탕탕 개발 블로그 도전기
[Java] 상속과 Override 본문
https://narunarus.tistory.com/11
03.20~03.21[Java]
03.20(수) ● Java 생성자 함수 Java에서 생성자 함수(Constructor)는 객체가 생성될 때 자동으로 호출되는 특별한 유형의 메서드이다. 주로 객체를 초기화하는 데 사용함. 객체의 field(변수)에 초기값을
narunarus.tistory.com
상속이란?
Java에서 상속(Inheritance)은 한 클래스가 다른 클래스의 속성(필드)과 메서드를 물려받을 수 있는 기능을 의미한다.
상속은 코드 재사용성을 높이고, 프로그램의 구조를 체계적으로 관리할 수 있게 해준다.
상속을 통해 기본적인 기능을 가진 클래스(부모 클래스 또는 슈퍼 클래스)로부터 보다 구체적인 기능을 가진 클래스(자식 클래스 또는 서브 클래스)를 생성할 수 있다.
상속의 주요 특징과 장점
1. 코드의 재사용 : 상속을 통해 기존 클래스의 필드 및 메소드를 재사용하여 새로운 클래스를 만들 수 있다. 이는 코드의 중복을 줄이고, 유지보수를 용이하게 한다.
2. 확장성 : 상속받은 클래스는 추가적인 기능을 구현할 수 있다. 기존 코드를 수정하지 않고 새로운 기능을 추가할 수 있어, 소프트웨어의 확장성이 높아진다.
3. 다형성 : 상속은 다형성의 기반이 되는데, 다형성을 통해 한 인터페이스로 다양한 구현을 제공할 수 있으며, 코드의 유연성과 확장성이 증가한다.
4. 계층 구조 : 상속은 클래스 간의 계층 구조를 형성하여, 이 구조를 통해 클래스 간의 관계를 명확하게 할 수 있으며, 객체 지향 설계를 체계적으로 할 수 있다.
Java에서 클래스는 'extends' 를 이용해 다른 클래스를 상속 받는다. 다만 자바의 경우 단일 상속만을 지원하므로, 한 클래스는 오직 하나의 클래스만 상속 받을 수 있으며, 인터페이스의 경우는 'implememts'를 사용해 상속받는데 인터페이스는 다중 상속이 가능하다.
그 외의 주의 사항으로는 private 접근 제한자를 가진 필드와 메서드는 자식 클래스에서 직접 접근할 수 없으며, 대신 부모 클래스에서 public 또는 protected 접근 제한자를 사용하여 접근할 수 있는 메서드를 제공해야 한다.
또한 자식 클래스는 상속받은 부모 클래스의 메소드를 재정의(오버라이딩)할 수 있다.
상속의 예)
class Parent {
final void show() {//불변하는 값(절대 상수화)
System.out.println("이 메서드는 오버라이드할 수 없습니다.");
}
}
class Child extends Parent {
// 오버라이드 시도 시 컴파일 에러 발생
// 부모 객체에서 show()라는 메소드를 상속을 통해 참조 할 수는 있지만
//override를 통해서 재정의해서 재사용 할 수는 없다.
//결론 : 참조는 가능하되, 재정의가 불가능(부모 클래스에서 정의된 그대로 사용해야함.)
void show() {
System.out.println("오버라이드 시도!");
}
}
Override
Override 란 객체 지향 프로그래밍에서 하위 클래스가 상위 클래스로부터 상속받은 메서드를 재정의하는 것을 말한다.
자식 클래스가 부모 클래스로부터 상속받은 메서드를 자신의 상황에 맞게 구현을 새롭게 할 수 있게 해준다.
(오버라이딩을 통해 상속받은 메서드와 동일한 메서드 이름, 매개변수 리스트를 가지면서도, 하위 클래스(자식클래스)에 맞게 메서드의 동작을 변경할 수 있다.)
메소드를 오버라이딩하기 위해선 몇 가지의 규칙이 있다.
오버라이딩의 규칙
- 메서드 시그니처 일치: 오버라이딩할 메소드는 부모 클래스에서 정의된 메소드와 정확히 같은 메소드 이름, 매개변수 목록을 가져야 한다.
- 접근 제어 레벨: 오버라이드하는 메서드는 부모 클래스의 메서드와 같거나 더 넓은 접근 제어 레벨을 가져야 한다. 예를 들어, 부모 클래스의 메서드가 protected라면, 자식 클래스에서 오버라이드하는 메서드는 protected 또는 public이어야 한다.(private 접근 제한자는 사용 불가)
- 반환 타입: 오버라이드하는 메소드의 반환 타입은 부모 클래스의 메소드 반환 타입과 같거나, 그 반환 타입의 하위 타입이어야 합니다(공변 반환 타입)
Java에서는 @Override를 사용하여 메소드가 오버라이드되었음을 나타낸다. 이것은 컴파일러에게 해당 메소드가 부모 클래스의 메소드를 오버라이드한다는 것을 알리며, 만약 부모 클래스에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생시킨다.
오버 라이딩의 예)
class Animal {
public void sound() {
System.out.println("동물이 소리를 낸다.");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("개가 멍멍 짖는다.");
}
}
public class Test {
public static void main(String[] args) {
Animal myAnimal = new Dog();
myAnimal.sound(); // 출력: 개가 멍멍 짖는다.
}
}
해당 예제에서는 'Dog'이라는 이름의 클래스가 'Animal'이라는 이름의 부모 클래스의 메소드를 상속 받지만, Dog이라는 클래스의 이름답게 부모 클래스에서 상속받은 sound()라는 메서드를 자신의 상황에 맞게 구현한 것을 보여준다.
'Java' 카테고리의 다른 글
[Java] collection framework의 특정한 문자열을 key로 지정하기 (0) | 2024.03.26 |
---|---|
Calendar 클래스를 이용해 주민번호를 통해 나이 구하기 (0) | 2024.03.24 |
[Java] 생성자 함수와 'this' (1) | 2024.03.23 |
[JAVA] 시험 결과를 출력하고, 점수에 따라 등수를 차등으로 출력하는 문제 (1) | 2024.03.21 |
[JAVA] Charater Class, Integer 클래스를 이용해 주민 번호의 합을 구하는 문제 (0) | 2024.03.21 |