15.오버로딩(overloading)
: 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
(1) 메서드 이름이 같아야 한다.
(2) 매개변수의 개수 또는 타입이 달라야 한다.
(3) return타입은 아무런 영향도 주지 않는다.
16.생성자(constructor)
- 인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’
- 모든 클래스에는 반드시 하나 이상의 생성자가 생성되어야 한다.
- 리턴값이 없다. (void사용 x)
- 생성자의 이름은 클래스의 이름과 같아야 한다.
- 오버로딩 가능
- point:생성자와 (클래스/인스턴스)메서드 구분하기
- 생성자가 갖는 몇 가지 특징을 제외하면 메서드와 다르지 않다.
[1]기본 생성자 - default constructor
: 매개변수가 없는 생성자 (클래스 내에 생성자가 하나도 없을 시 자동 생성됨)
[2]매개변수가 있는 생성자
16-1.생성자에서 다른 생성자 호출 - this()
- 생성자의 이름으로 클래스이름 대신 this를 사용한다.
- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출 가능
17. 참조변수 this
- 인스턴스 변수와 지역 변수를 구분하는 데에 사용
- 인스턴스 변수 앞에 this.를 붙인다.
- static메서드에서는 인스턴스 변수를 사용하지 않으므로 참조변수 this를 사용하지 않는다.
- 참조변수 this와 생성자 this()를 혼동하지 않아야 한다. (완전히 다름)
18. 멤버변수의 초기화
- 지역변수는 초기화 항상 필요 / 멤버변수는 기본값으로 자동 초기화 된다.
- 자동 초기화 -> 명시적 초기화 -> (클래스/인스턴스)초기화 블럭 -> 생성자
- 클래스 변수 -> 인스턴스 변수
- 클래스 초기화 블럭은 처음 메모리에 로딩될 때 한번만 수행되지만,
인스턴스 초기화 블럭은 인스턴스가 생성될 때마다 수행된다.
19. 상속
(~은 ~이다. is-a)
: 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
- 코드의 재사용성을 높이고 중복을 제거. 유지보수가 용이하다.
상속 클래스 예시
class Parent {}
class Child extends Parent {}
- 상속 해준 클래스 = 조상클래스 (Parent)
- 상속 받은 클래스 = 자손 클래스 (Child)
* 상속관계를 그림으로 표현한 것 : 상속계층도(class hierarchy)
* 자손 클래스는 조상 클래스의 생성자, 초기화 블럭을 제외한 모든 멤버를 상속받는다.
* 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
* 조상 클래스를 변경하면 자손 클래스는 영향을 받지만, 자손 클래스의 변경은 조상 클래스에 아무런 영향을 주지 않는다.
* 상속은 오직 하나의 클래스로부터만 상속 받을 수 있다. (단일 상속)
* 모든 클래스 상속계층도 최상위에는 Object라는 조상클래스가 있다.
(아무것도 상속 받지 않는 클래스들은 컴파일러에 의해 자동으로 Object 클래스를 상속받는다.)
19-1. 포함
(~은 ~을 가지고 있다. has a)
: 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
19-2. 오버라이딩(overriding)
: 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
* 메서드의 선언부(메서드 이름, 매개변수, 반환타입)은 변경할 수 없다.
* 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
* 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
19-3. 참조변수(super) / 생성자 super()
1) 참조변수super - 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수
2) 생성자 super() - 조상의 생성자를 호출하는데 사용
20. static - 클래스의, 공통적인
*static이 사용될 수 있는 곳 - 멤버변수, 메서드, 초기화 블럭
- static이 붙은 메서드 내에서는 iv를 사용할 수 없다.
- static이 붙은 멤버변수, 메서드는 인스턴스를 생성하지 않고도 사용 가능
21. final - 마지막의, 변경될 수 없는
*final이 사용될 수 있는 곳 - 클래스, 메서드, 멤버변수, 지역변수
1) 클래스 - 확장될 수 없는 클래스로 다른 클래스의 조상이 될 수 없다.
2) 메서드 - 오버라이딩을 통해 재정의 될 수 없다.
3) 변수 - 상수가 되어 값을 변경할 수 없다.
23. abstract - 추상의, 미완성의
*abstract가 사용될 수 있는 곳 - 메서드, 클래스
- 추상 클래스, 추상 메서드를 만들 때 사용된다.
- 추상 클래스는 아직 완성되지 않는 메서드가 존재하는 ‘미완성 설계도’이므로 인스턴스 생성 불가
- 추상 클래스는 상속을 통한 자손클래스에 의해서만 완성될 수 있다.
- 추상 메서드는 구현부가 없으므로 괄호{} 대신 ‘;’을 적어준다.
/*주석을 통해 어떤 기능을 수행할 목적으로 작성했는지 설명한다.*/
< abstract 리턴타입 메서드이름(); >
- 추상클래스를 상속받은 자손클래스는 오버라이딩을 통해 이를 구현한다.
하나라도 추상메서드가 남아있다면 자손클래스 또한 추상클래스가 된다.
- 추상 클래스는 보편적으로 자손 클래스의 공통적인 부분을 뽑아내 만든다.
- 추상 클래스의 메서드를 호출할 때에 실제로는 이를 구현한 자손 클래스의 메서드가 호출된다.
'Study > Java' 카테고리의 다른 글
07. <예외처리,equals, hashCode, clone, toString> ~자바의 정석 summary ~ (0) | 2023.01.14 |
---|---|
06. <제어자, 캡슐화, 다형성, 형변환, 인터페이스 > ~자바의 정석 summary ~ (0) | 2023.01.13 |
04. <배열, 가변배열, 객체지향1 > ~자바의 정석 summary ~ (0) | 2023.01.11 |
03. <제어문, 화면으로부터 입력받기> ~자바의 정석 summary ~ (0) | 2023.01.10 |
02. <타입변환, 형변환, 연산자> ~자바의 정석 summary ~ (0) | 2023.01.09 |
댓글