본문 바로가기
CSE/CP1 이론

CP1_07.객체지향 프로그래밍_Advanced_2.오버라이딩

by 0/0 2024. 6. 11.
1. Basics 클래스, 객체, 변수, 메서드 // 생성자, 초기화
2. Advanced 상속, 오버라이딩 // package, import, modifiers, 다형성 // 추상클래스, interface, 내부클래스
2. 오버라이딩(Overriding) 1. 오버라이딩
2. 오버라이딩의 조건
3. 오버로딩 vs 오버라이딩
4. super 참조변수
5. super()-상위 클래스의 생성자 호출하기

 

2.1 오버라이딩

-상위 클래스로부터 받은 메서드가 있는 경우에만 가능

-하위 클래스에서도 (하위 클래스에 맞게 변경하여) 똑같은 것을 다시 정의함

 

2.2 오버라이딩의 조건

1)선언부가 같아야 함(이름, 매개변수, 리턴 타입)

 2)접근제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음(to be continued...)

 3)조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없음(to be continued...)

-인스턴스 메서드를 static 메서드로 또는 그 반대로 변경할 수 없음

(*static 메서드는 오버라이딩이라고 안 함 instance 메서드를 오버라이딩이라고 함)

 

2.3 오버로딩 vs 오버라이딩
-오버로딩: 내 클래스에, 동일한 이름의 새로운 메서드 정의 (매개변수가 다름)(하나의 class 안)

-오버라이딩: 상위클래스에서 계승받은 메서드와 동일한 이름의 새로운 메서드를 정의(두 개 이상의 class에 대한 문제)

오버로딩, 오버라이딩

 

2.4 super 참조변수

  • super
    하위 클래스에서 상위 클래스로부터 계승받은 멤버를 참조하는 참조변수
    상위, 하위 클래스에 있는 이름이 같은 멤버 변수를 구별
  • 상위 클래스가 있을 때 멤버 변수 접근 방법
    -int i; 가 상위클래스에만 있으면: i, this.i 로 접근
    -int i; 가 하위클래스에만 있으면: "
    -int i;가 상, 하위 클래스 모두 있으면: 
      ㄴi라고 하면 하위 클래스 i가 접근됨
      ㄴsuper.i 라고 하면 상위 클래스 "
  • 하나의 child 객체에 두 개의 getCoordinates() 존재
    -상위 클래스의 getCoordinates()는 super.getCoordinates()로 접근
    (super.을 빼면 this.이 붙어있다는 것과 같고 이를 '재귀호출'이라 함.

2.5 super() - 상위 클래스의 생성자 호출하기

  • 상위 클래스 멤버의 초기화 - 도입

상위 클래스 멤버는 어떻게 초기화 할까?
방법1_맨손으로
super() 사용

사진(super()사용)처럼 super(x,y); 작성 시, 상위클래스인 Point의 생성자를 하위클래스인 ColorPoint의 생성자에서 호출할 수 있음

  • 상위 클래스 멤버의 초기화 - super() 사용시 주의사항
    하위 클래스의 생성자의 반드시 첫 줄에서 상위 클래스의 생성자 호출
    Object 클래스 제외한 모든 클래스의 생성자 첫 줄에는 상위 클래스 생성자를 호출해야함
    *누락 시, 컴파일러가 자동으로 super();를 생성자 첫 줄에 추가 (상위 클래스 생성자가 먼저 실행됨)
    **누락 시, 상위 클래스에 인자 없는 생성자가 하나도 없으면 문제? -> 인자가 있는 생성자들만 있는 상태, 그런데 인자 있는 생성자는 컴파일러가 자동으로 추가해주지 않음