2020년 4월 27일 주요공부
class Main {
public static void main(String[] args) {
사람 a홍길동 = new 홍길동();
System.out.printf("== 홍길동 정보 ==\n");
System.out.printf("이름 : %s\n", a홍길동.이름); // 홍길동
System.out.printf("나이 : %s\n", a홍길동.나이); // 22
사람 a홍길순 = new 홍길순();
System.out.printf("== 홍길순 정보 ==\n");
System.out.printf("이름 : %s\n", a홍길순.이름); // 홍길순
System.out.printf("나이 : %s\n", a홍길순.나이); // 22
}
}
class 사람 {
String 이름;
int 나이;
사람() {
this.나이 = 22;
}
}
class 홍길동 extends 사람 {
홍길동() {
this.이름 = "홍길동";
}
}
class 홍길순 extends 사람 {
홍길순() {
this.이름 = "홍길순";
}
}
생성자는 클래스명과 같아야한다.
설명으로 홍길동과 홍길순은 나이가 같으므로 '사람'클래스 안에서 공통분모로 나이를 사용할수있다.
사람() { 나이 = 20;} 같이 쓴다.
모든 클래스는 인스턴스화 될때 생성자를 사용한다.생성자의 특징
- 생성자는 리턴타입이 없다.
- 생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 컴파일할 때 자동으로 만들어진다.
- 매개변수가 없는 생성자를 기본생성자라고 한다.
- 생성자를 하나라도 프로그래머가 만들었다면 기본생성자는 자동으로 만들어지지 않는다.
생성자의 역할
- 생성자가 하는 일은 객체가 될 때 필드를 초기화 하는 역할을 수행한다.
- 자동차가 객체가 될때 반드시 이름을 가지도록 하려면,Car클래스를 다음과 같이 만들어야 한다.
동일한 이름의 변수가 부모 클래스와 자식 클래스에 둘 다 존재할 경우 부모 클래스의 변수는 가려진다고 했습니다. 그렇다면 어떻게 부모 클래스의 변수를 이용할 수 있을까요? 우리가 이제 배우게 될 super라는 예약어로 해결이 가능합니다. 이 예약어를 사용하면 상위 클래스의 생성자에도 접근을 할 수 있게되죠.
자, 여기서 super 예약어를 어떻게 사용하는지 정리해봅시다.
● 부모 클래스의 멤버 변수 접근: super.멤버변수
● 부모 클래스의 멤버 메소드 접근: super.멤버메소드(매개변수);
● 부모 클래스의 생성자 호출: super(매개변수);
그리고 super 예약어를 사용하면서 주의하셔야 할 점들이 몇가지 있습니다.
● 반드시 자식 클래스의 생성자 첫 라인에서 부모의 생성자를 호출해야 함.
● 자식 클래스의 생성자 내에서 반드시 부모의 생성자를 호출해야 함.
● 명시적으로 자식의 클래스에서 부모의 생성자를 호출하지 않아도 super가 자동 삽입되어 부모 클래스의 생성자를 호출 함.
출처: https://blog.hexabrain.net/116 [끝나지 않는 프로그래밍 일기]
'JAVA 공부' 카테고리의 다른 글
자바의 객체지향 특징 (0) | 2020.04.28 |
---|---|
추상클래스(abstract) (0) | 2020.04.28 |
아스키코드(ASCII CODE) (0) | 2020.04.26 |
변수와 자료형(디폴트값) (0) | 2020.04.26 |
클래스와 객체 (0) | 2020.04.24 |
댓글