220926 정리

서이·2022년 9월 26일

수업정리

목록 보기
5/17



메소드 재정의(@Override)

 메소드 오버라이딩은 상속된 메소드의 내용을 재정의하는 것을 말한다.
메소드가 오버라이딩되었다면 부모 객체의 메소드는 숨겨지기 때문에, 자식 객체에서 메소드를 호출하면 오버라이딩된 자식 메소드가 호출된다.


class Shape {
	public void shape() {
		System.out.println("도형입니다.");
	}

	public void draw() {
		System.out.println("도형을 그립니다.");
	}
}

//상속관계에서 부모의 함수을 재정의하는것(바디만 달리하는것)
class Rectangle extends Shape {
	public Rectangle() {
		System.out.println("사각형 생성자");
	}

	@Override
	public void draw() {
		System.out.println("사각형을 그립니다.");
	}
}

class Trangle extends Shape {
	public Trangle() {
		System.out.println("삼각형 생성자");
	}

	@Override
	public void draw() {
		System.out.println("삼각형을 그립니다.");
	}
}

public class OverrideTest {

	public static void main(String[] args) {
		// 1번
		Shape shape = new Shape();
		shape.draw();

		Rectangle rc = new Rectangle();
		rc.draw();

		Shape shape2 = new Rectangle();
		shape2.draw();
      }
    }

 메소드가 재정의되었다면 부모 객체의 메소드는 숨겨지기 때문에 자식 객체에서 메소드를 호출하면 재정의된 자식 메소드가 호출된다.


 메소드 오버라이딩 할 때에 주의점

  • 부모의 메소드와 동일한 리턴타입,메소드 이름, 매개 변수 리스트)를 가져야한다.
  • 접근 제한을 더 강하게 오버라이딩 할 수 없다.

 접근 제한을 더 강하게 오버라이딩 할 수 없다는 것은 부모 메소드가 public 접근 제한을 가지고 있을 경우 오버라이딩하는 자식 메소드는 default나 private 접근 제한으로 수정할 수 없다는 뜻이다.

 반대는 가능하다. 부모 메소드가 default 접근 제한을 가지면 재정의되는 자식 메소드는 default 또는 public 접근 제한을 가질 수 있다.


 오버로딩(Overloading)
오버로딩의 조건
1. 메서드 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.

메서드의 이름이 같다 하더라도 매개변수가 다르면 서로 구별될 수 있기 때문에 오버로딩이 가능한 것이다. 위의 조건을 만족시키지 못하는 메서드는 중복 정의로 간주되어 컴파일 시에 에러가 발생한다.
그리고 오버로딩된 메서드들은 매개변수에 의해서만 구별될 수 있으므로 반환타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다는 것에 주의


(이름이 cat인 메서드가 총 3개 있지만 매개변수의 유형과 개수가 다름)

profile
작성자 개인이 잊을 때마다 보라고 정리한 글

0개의 댓글