[27] super, super()
* super
- 부모 클래스의 멤버변수에 접근 할 수 있다.
- 현재 객체의 바로 위의 부모클래스를 참조할 수 있는 참조변수
- 조상의 멤버와 자신의 멤버를 구분하는데 사용
* super() 생성자 메소드
- 부모클래스의 생성자를 의미.
인자가 있다면 인자의 형태와 일치하는 생성자를 의미
- 부모의 멤버들도 초기화 되어야 하기 때문에 자식의 생성자와
첫 문장에서 부모의 생성자를 호출해야 함.
- 꼭 호출해야 할 클래스가 있음.
- 초기화 하려는 변수가 부모클래스와 자식 클래스간에 나누어져 있는 경우
부모와 자식의 생성자에서 그 변수들을 나누어 초기화 한다.
자식 클래스() 시작 --> 부모 클래스 생성자() 시작/완료 --> 자식 클래스() 완료
- 자식 클래스는 자신이 가지고 있는 멤버 변수만 초기화하고
나머지는 부모클래스의 생성자를 호출해서 부모클래스의 멤버로 초기화 한다.
- 부모클래스의 생성자를 호출할 경우는 반드시 자식 클래스의 생성자안에서
가장먼저 선언해야 한다.
이유는 자식 클래스의 모듈이 실행되기전에 부모클래스의 생성자가 먼저 실행이
되어야 하는 우선순위의 규칙 때문에 그렇다.
-----------------------------------------------
package oop5super;
class School{
String str = "";
public School(){
this.str = "각종 학교 정보 안내";
}// 기본 생성자
}
class MiddleSchool extends School{
String middle = "";
public MiddleSchool(){
this.middle = "JAVA 중학교";
}// 기본 생성자
public void prn(){
int year = 3;
System.out.println("super.str: " + super.str);
System.out.println("this.middle: " + this.middle);
System.out.println("교육기간: " + year);
}
}
public class SuperEx1 {
public static void main(String[] args) {
MiddleSchool ms=new MiddleSchool();
ms.prn();
}
}
------------------------------------------
package oop5super;
class OverC {
int i, j;
public OverC(){}
public OverC(int i, int j) {
System.out.println("부모클래스의 생성자 호출");
this.i = i;
this.j = j;
}
}
//=======================
class SubOverC extends OverC {
int k;
SubOverC()
{
//super();//부모생성자 기본생성자 호출
}
SubOverC(int i,int j,int k)
{
super(i,j);
this.k=k;
}
}
//=======================
public class SuperEx2 {
public static void main(String[] args) {
SubOverC so=new SubOverC(4,5,6);
System.out.println(so.i);
System.out.println(so.j);
System.out.println(so.k);
}
}