오늘의 요약
1. (메소드)오버라이딩( Overriding )
(1) '상속관계'에서 부모의 메소드의 일(내용)을 자식에서 '바꾸는 것'
-> 오버라이딩이란, 덮어쓰는 것을 얘기한다.
(2) 조건
1) 메소드 이름이 같아야 함
2) 반환타입이 일치해야 함
3) 생성자는 불가
-> 생성자를 호출하려면 클래스명과 이름이 똑같아야 하는데, 오버라이딩을 하려면 부모와 자식간의 이름이 똑같아야 한다. 고로 논리적으로 맞지 않는 말이다.
4) 파라미터의 타입, 순서, 갯수가 모두 일치해야 함
-> 파라미터 변수의 변수명은 중요하지 않다. 변수명이 달라도 오버라이딩 할 수 있다.
5) 자식메소드의 접근제한자가 부모메소드의 접근제한자보다 같거나 넓어야 한다.
-> 접근제한자 : 클래스의 구조에서 생성자, 메소드, 멤버변수 모두 접근제한자(default)가 존재하는 것이다. 추후 공부할 것이지만, 접근범위가 넓은 순서는 다음과 같다. public > protected > default > private 순임
2. 오버로딩 ( Overloading )
(1) 정의: (호출 시 그 형태에 매핑되서 호출되도록) 파라미터의 종류나 순서나 갯수가 다른 '같은 이름의 메소드나 생성자를 여러개 정의하는 것'
-> 김치찌개를 만들 여러가지 재료(참치, 삼겹살, 스팸, 꽁치 등)를 미리 준비해둬서 어떤 김치찌개를 만들지 그때 그때 상황에 따라 정하는 행위
-> 메소드와 생성자를 똑같은 이름으로 조금씩 다른 기능, 변수를 받아 만든 뒤 나중에 쓸 수 있게 준비해두는 것
(2) 종류
1) 생성자
2) 메소드
(3) 특징
1) 반환타입과 관계없음
2) 접근제한자와 관계없음
3) 상속관계라면 다른 클래스에서도 오버로딩 가능
4) 형변환이 가능한 파라미터라도 오버로딩으로 인정
3. this 와 super
(1) this
1) 정의: 자신의 '객체' 또는 '생성자'를 의미하는 대명사
-> 정의를 내려보는 연습을 계속 해볼 것,
-> 다른 사람의 의견을 반영한다면 근본적으로 이해하기에는 바람직하지 못하다.
2) 사용예
<1> 지역변수와 이름이 같은 멤버변수를 해당 지역에서 접근할 때
<2> 자신의 생성자를 호출할 때
<3> 자신의 객체를 다른 클래스에게 넘길 때
(2) super
1) 정의: 부모의 '객체' 또는 '생성자'를 의미하는 대명사
2) 사용예
<1> 부모의 생성자를 호출할 때
<2> 이름이 같은 부모의 멤버를 자식에서 접근할 때
-> 프로그램에서는 주어가 항상 있어야 하는데, '나=this'는 생략할 수 있다.
<3> 오버라이딩 되기 전의 부모메소드를 자식에서 호출할 때