23.01.30 day06 다형성 - Override

Lee·2023년 1월 30일
0

3. 다형성 - Override

3-1. override란

  • 부모 클래스가 갖고 있는 기능을 자식 클래스가 재정의한다
  • 부모 클래스에 정의된 것과 동일한 이름을 갖는
  • 메서드를 자식 클래스가 정의한 경우, 부모 클래스의
    기능은 자식에게 가려진다.
  • 이렇게 부모의 기능을 재정의 하는 것을 메서드
    Override라 한다.
  • 하나의 이름으로 다양한 효과 얻기
  • 모든 자식 클래스가 동일한 이름의 메서드를 갖게 되므로
    각 객체에 대하여 attack()이라는 이름을 사용하여
    서로 다른 형태를 구현할 수 있게 된다.

3-2. Super 키워드

  • 클래스의 상속관계에서 자식 클래스가 부모 클래스를
    가리키는 예약어
  • 사용방법
    -> 멤버변수 이름 앞에 명시
    부모클래스의 멤버변수를 의미한다.
    하지만 부모클래스의 멤버변수는 이미모두
    상속되어 있기 때문에 이 경우에는 this 키워드를
    사용하는 것과 동일한 결과이기에 잘 사용하지 않는다.
--> 메서드 이름 앞에 명시
- 부모 클래스의 메서드를 의미한다.
- 재정의 되지 않은 메서드
	=> 이미 상속되어 있기 때문에
	this키워드를 사용하는 것과 동일한
	결과를 갖는다.
- 재정의된 메서드
	=> Oeverride된 메서드 이름 앞에
	사용하게 되면 재정의 되기 이전의
	원본 메서드를 의미한다.

class Hello{
public void say(){
System.out.println("Hello");
}
}

class Korean extends Hello{
public void say(){
System.out.println("안녕하세요");
}
public void sayHello(){
super.say();
this.say();
}
}

	"Hello"
	"안녕하세요"



--> 키워드 자체를 메서드처럼 사용
- 부모클래스의 생성자를 의미
- super( );

3-3. 상속 관계에서의 생성자 처리

  • 생성자가 정의된 클래스의 상속 제한
  • 하지만 생성자가 정의된 클래스는 객체 생성을 위해서
    생성자 파라미터를 반드시 전달받아야 하기 때문에, 파라미터를 갖는
    생성자가 정의된 클래스를 상속받게 되면 에러가 발생한다.

3-4. 부모 생성자의 강제 호출

  • 생성자가 정의된 클래스를 상속받은 경우에는 자식 클래스의
    생성자를 통해서 부모 생성자를 강제로 호출해야 한다.
  • 부모의 생성자를 호출하는 방법은 super키워드를 메서드 이름으로
    사용하는 것이다.

3-5. @Override

  • 메서드 재정의 과정에서의 오타방지 옵션
  • @Override는 키워드가 명시된 위치 아래에 정의되는 메서드가
    부모클ㄹ스에 존재하지 않을 경우 구문 에러로 처리한다.
  • 부모 클래스의 메서드를 재정의 하고자 할 경우, 의도치 않은 실수를
    예방하기 위한 '오타방지 옵션' 이다.
  • 여러 개의 메서드를 재정의 한다면 재정의 되는 모든 메서드들 위에
    각기 명시해야 한다.
profile
wow

0개의 댓글