Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

재훈재훈

상속과 생성자 본문

Computer Engineering/JAVA

상속과 생성자

jaehoonx2 2018. 4. 7. 17:29

상속과 생성자


▶생성자가 없을 경우 자동으로 기본 생성자(파라미터가 없는)가 만들어진다.

   생성자가 하나라도 있을 경우 자동으로 만들어지지 않는다.


▶모든 서브 클래스의 생성자는 먼저 수퍼클래스의 생성자를 호출한다.

- 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;

}

}