<ch6-30 오버로딩>
한 클래스 안에 같은 이름의 메소드 여러 개 정의하는 것
- 오버로딩이 성립하기 위한 조건
1. 메소드 이름이 같아야 한다
2. 매개변수의 개수 또는 타입이 달라야 한다
3. 반환 타입은 영향없다
- 오버로딩의 올바른 예: 매개변수는 다르지만 같은 의미의 기능수행
The method add(int, long) is ambiguous for the type MyMath3 --> 에러 발생. 모호하다는 의미.
----------------------------------------------------------
<ch6-32~35 생성자, 기본 생성자>
ch6-32 생성자(constructor)
- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메소드', 즉, iv초기화 메소드이다
- 인스턴스 생성시 수행할 작업(iv 초기화)에 사용
생성자를 추가해야 편리하게 사용할 수 있다
(생성자)
- 이름이 클래스 이름과 같아야 한다
- 리턴값이 없다(void 안 붙임)
- 모든 클래스는 반드시 생성자를 1개 이상 가져야 한다.
ex) Card c = new Card();
ㄴ 생성자 호출
(ch6-33 기본 생성자(defalut constructor))
- 매개변수가 없는 생성자
- 생성자가 하나도 없을 때만, 컴파일러가 자동 추가(원래는 우리가 직접 작성한다)
--> cannot resolve symbol: 이름에 문제가 있다는 의미. 못 찾겠어!
이유는? Data_2 d2 = new Data_2(); 기본 생성자를 호출했는데 생성자가 없기 때문이다
Data_2( ) { } --> 이렇게 기본 생성자를 추가해줘야 한다
그럼 Data1은 왜 에러가 안날까? 생성자가 0개이기 때문에 컴파일러가 기본 생성자 자동 추가
Data2처럼 생성자가 1개라도 있을 경우 자동으로 넣어주지 않는다. 우리가 직접 꼭 넣어줘야 한다.
--> 이것은 Data2에서 Data2()라는 생성자를 찾을 수 업다는 내용의 에러메시지인데, Data2에 생성자 Data2()가 정의되어 있지 않기 때문에 에러가 발생한 것이다.
Data1의 인스턴스를 생성하는 코드에는 에러가 없는데, Data2의 인스턴스를 생성하는 코드에서 에러가 발생하는 이유는 무엇일까?
그 이유는 Data1에는 정의되어 있는 생성자가 하나도 없으므로 컴파일러가 기본 생성자를 추가해주었지만, Data2에는 이미 생성자 Data(int x)가 정의되어 있으므로 기본 생성자가 추가되지 않았기 때문이다.
컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 '클래스 내에 생성자가 하나도 없을 때' 뿐이라는 것을 명심해야한다.
---------------------------------------------------
<ch6-34 매개변수가 있는 생성자>
'자바의정석 > Chapter 6' 카테고리의 다른 글
ch6-36, 37 생성자 this() 참조변수 this (0) | 2022.12.02 |
---|---|
ch6 - 22 호출 스택(call stack) (0) | 2022.11.30 |
ch6 20, 21 return문, 반환값 (0) | 2022.11.29 |
ch6-11 선언 위치에 따른 변수의 종류 (0) | 2022.11.29 |
CH6-8 객체 배열 (0) | 2022.11.28 |