재훈재훈
상속과 생성자 본문
상속과 생성자
▶생성자가 없을 경우 자동으로 기본 생성자(파라미터가 없는)가 만들어진다.
생성자가 하나라도 있을 경우 자동으로 만들어지지 않는다.
▶모든 서브 클래스의 생성자는 먼저 수퍼클래스의 생성자를 호출한다.
- super(...)를 통해 명시적으로 호출해주거나
- 그렇지 않을 경우에는 자동으로 수퍼클래스의 기본생성자가 호출된다.
▶흔한 오류:
수퍼클래스에 기본 생성자가 없는데, 서브클래스의 생성자에서 super(...) 호출을 안해주는 경우
해결책 1. 수퍼클래스에 기본 생성자를 인위로 만들어준다. - 임시방편
해결책 2. 서브클래스의 생성자에서 수퍼클래스의 생성자 ( super(...) ) 를 호출
▶ super(arguement)
수퍼클래스의 생성자 중에서 매개변수 리스트가 일치하는 생성자를 호출한다.
super()를 호출할 경우 반드시 생성자 내에서 첫 문장이어야 한다.
cf) super
super는 수퍼클래스의 멤버(데이터 혹은 메서드)를 호출할 때 쓰인다.
수퍼클래스의 메서드를 서브클래스에서 overriding 할 경우, 용도가 유사할 때
super를 사용하여 기존 내용을 불러오고, 거기에서 별도 내용만 작성하면 되기에
코드의 중복을 줄일 수 있다.
소스 출처 - 부경대 권오흠 교수님, <JAVA로 배우는 자료구조> 강의
public class Computer { // 수퍼클래스
private String manufacturer;
private String processor;
private int ramSize;
private int diskSize;
private double processorSpeed;
/*
public Computer() {}
이렇게 기본생성자를 명시적으로 선언해주어도 에러를 막을 수 있다.
이럴 경우, super(...)를 선언하지 않은 서브클래스의 생성자는 수퍼클래스의
기본생성자를 호출할 것이다.
*/
public Computer(String man, String proc, int ram, int disk, double procSpeed)
{
manufactuer = man;
this.processor = proc;
ramSize = ram;
diskSize = disk;
processorSpeed = procSpeed;
}
}
public class Notebook extends Computer { //서브클래스
private double screenSize;
private double weight;
public Notebook(String man, String proc, int ram, int disk, double procSpeed, double screen, double weight) {
super(man, proc, ram, disk, procSpeed);
//수퍼클래스의 생성자를 호출
screenSize = screen;
this.weight = weight;
}
}
'Computer Engineering > JAVA' 카테고리의 다른 글
추상클래스와 인터페이스 (0) | 2018.04.07 |
---|---|
다형성과 동적 바인딩 (0) | 2018.04.07 |
참조변수(클래스 및 배열)의 선언 및 생성 시 주의할 점 (0) | 2018.04.07 |
문자열 다루기 예제 3 - index maker 수정본 (0) | 2018.04.07 |
문자열 다루기 예제 2 - index maker (0) | 2018.04.07 |