참조변수 super

정순동·2023년 12월 6일
0

자바기초

목록 보기
29/89

참조변수 super

super란? 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 멤버가 이름이 같을 때는 super를 붙여서 구별할 수 있다.

	class Example {
    	public static void main(String[] args) {
        	Child c = new Child();
            c.method();
        }
    }
    
    class Parent {
    	int x = 10;
    }
    
    class Child extends Parent {
    	int x = 20;
        
        void method() {
        	System.out.println("x=" + x);
            System.out.println("this.x=" + this.x);
            System.out.println("super.x=" + super.x);
        }
    }

결과는 x = 20, this.x = 20, super.x = 10 이다.

모든 인스턴스 메서드에는 this와 super가 지역변수로 존재하는데, 이 들에는 자신이 속한 인스턴스의 주소가 자동으로 저장된다. 조상의 멤버와 자신의 멤버를 구별하는데 사용된다는 점 빼고는 this와 super는 근본적으로는 같다.

생성자로써의 super()

this()처럼 super()도 생성자이다. this()는 같은 클래스의 다른 생성자를 호출하는데 사용하지만, super()는 조상의 생성자를 호출하는데 사용한다.

	class Point {
    	int x, y;
        
        Point(int x, int y) {
        	this.x = x;
            this.y = y;
        }
    }
    class Point3D extends Point {
    	int z;
        
        Point3D(int x, int y, int z) {
        	super(x, y);
            this.z = z;
        }
    }

위의 경우 Point와 Point3D는 상속관계이나 상속에서 생성자는 상속되지 않기 때문에 super()로 조상의 x, y값을 초기화 해 주고 자신의 z도 초기화 해 준다.

0개의 댓글