댄스댄스 2012. 5. 1. 15:10

 

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

    }

}