#메서드 오버라이딩
: 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의 하는 것.
public class Main {
public static void main(String[] args) {
Drum drum = new drum();
Guitar guitar = new guitar();
Piano piano = new piano();
drum.play(); // 오버라이딩된 메소드
durm.play(drum); // 오버로딩된 메소드
guitar.play(); // 오버라이딩된 메소드
guitar.play(guitar); // 오버로딩된 메소드
piano.play();
}
}
class Instrument { // 메서드 오버로딩 : 한 클래스 내에서 매개변수가 다른
void play() {
System.out.println("Instrument is playing");
}
void play(String str) {
System.out.println(str);
}
}
class Drum extends Instrument {
void play() {
System.out.println("Drum is playing"); // 메서드 오버라이딩
}
}
class Guitar extends Instrument{
void play() {
System.out.println("Guitar is playing"); // 메서드 오버라이딩
}
}
class Piano extends Instrument {}
-메서드 오버라이딩의 조건
(1) 메서드의 선언부(메서드 이름, 매개변수, 반환 타입)가 상위클래스의 선언부와 완전히 일치해야 한다.
(2) 접근 제어자의 범위가 상위 클래스의 메서드보다 이상(같거나 넓음)이어야 한다.
(3) 예외를 상위 클래스 메서드보다 많이 선언할 수 없다.
-메서드 오버라이딩과 오버로딩의 차이점
: Instrument클래스 내에서 play메서드는 오버로딩 되고 있다.
Drum, Guitar, Piano클래스 내에서 play메서드는 오버라이딩 되고 있다.
#super 키워드와 super()
super 는 상위 클래스의 객체를 호출한다.
super() 는 상위 클래스의 생성자를 호출한다.
-> 둘의 공통점은 상위 클래스가 존재해야 한다는 것과 그 상위 클래스와 상속 관계를 전제로 한다는 것이다.
#Object 클래스
: Object 클래스는 클래스 상속계층도에서 최상위에 위치한 상위클래스이다.
즉 Object 클래스로부터 모든 클래스는 확장된다고 할 수 있다.
- 자바에서는 아무런 상속도 받지 않는 클래스가 자동으로 오브젝트클래스를 상속받도록
extends Object 를 추가한다.
- Object 클래스의 멤버들은 Object클래스의 멤버들을 사용할 수 있다.
- 자주 쓰이는 메서드들은 다음과 같다.
Object 클래스 메서드 | 기능 |
String toString() | 객체 정보를 문자열로 출력 |
boolean equlas | 같은 값임을 비교 |
int hashCode() | 해쉬 코드값을 반환 |
void wati() | 현재 스레드 일시정지 |
void notify(0 | 일시정지된 스레드 재시작 |
'개발지 > Today I learn' 카테고리의 다른 글
[0728] 자바 객체지향 프로그래밍 심화 (다형성) (0) | 2023.07.28 |
---|---|
[0727] 자바 객체지향 프로그래밍 심화 (캡슐화) (0) | 2023.07.27 |
[0720] 자바 객체지향프로그래밍 (상속1) (0) | 2023.07.21 |
[0719] 자바 객체지향프로그래밍 2 (생성자, 내부클래스) (0) | 2023.07.20 |
[0718] 자바 객체지향프로그래밍 2 (필드와 메서드) (0) | 2023.07.19 |