다형성( polymorphism) - Override

전영덕·2023년 1월 30일
0

Java Study

목록 보기
19/36

1. Override란?

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

2. Super 키워드

  • 클래스의 상속관계에서 자식클래스가 부모클래스를 카리키는 예약어
  • 사용방법 3가지
    1) 멤버변수 이름 앞에 명시 : 부모클래스의 멤버변수를 의미한다. 하지만 부모클래스의 멤버변수는 이미 모두 상속되어 있기 때문에, 이 경우에는 this키워드를 사용하는 것과 동일한 결과이기에 잘 사용하지 않는다.
    2) 메서드 이름 앞에 명시 : 부모클래스의 메서드를 의미한다.
    재정의되지않은 메서드 -> 이미상속되어 있기 때문에 this키워드를 사용하는 것과 동일한 결과를 갖는다.
    재정의된 메서드 -> Overriding된 메서드 이름 앞에 사용하게 되면, 재정의 되기 이전의 원본 메서드를 의미한다.
    3) 키워드 자체를 메서드처럼 사용 - 이게 살짝 어려움
    - 부모클래스의 생성자를 의미
    - super(); -> 이안에 파라미터도 들어갈 수 있음.
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();
	}	
}
  • 메인 메서드에서 sayHello() 입력하면
Hello
안녕하세요

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

  • 생성자가 정의된 클래스의 상속 제한

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

    부모클래스 자식클래스 각각이 있다. 자식클래스를 복제할 때, 부모클래스도 당연히 복제가 같이되었다. 이 때 ,부모클래스에 파라미터가 있다면 자식은 부모에게 파라미터를 넘겨줘야하는 의무가 있다.

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

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

0개의 댓글