ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - 상속과 super 키워드
    Java/java study 2022. 1. 16. 18:06
    728x90
    반응형

    상속

    class SubClass extends SuperClass{
    	...
    }

     상속이란 상위 클래스에서 정의한 필드와 메서드를 하위 클래스도 동일하게 사용할 수 있도록 물려받는 것을 말한다. 상속을 이용하면 코드의 중복을 피해주고 코드의 재사용성을 통해 간결성을 확보해준다.

     

     자바에서는 다중 상속을 허용하지 않는다. 그 이유는 다중 상속을 하면 상속받는 복수의 부모 클래스에 중복되는 필드나 메서드가 존재하는 경우, 같은 클래스를 두 번 이상 상속받는 경우 등 여러 문제가 발생하여 부모 클래스에 접근할 방법이 애매해지는 경우가 발생한다. 이와 같은 이유로 자바에서는 단일 상속만 허용한다. 

     

    상속의 특징
    • 다중 상속을 지원하지 않는다.
    • 모든 클래스는 암묵적으로 Object를 상속받는다.
    • 다단계 상속(Multi-Level Inheritance)이 가능하다.

     

     

    super 키워드

     

     

    super 키워드란?

     super는 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 레퍼런스 변수이다.

     

     

    super 키워드의 사용 1 - 부모 클래스의 인스턴스 변수를 참조

     사용법은 간단하다. 객체 자신의 인스턴스 변수를 참조할때 this키워드를 사용한것처럼

    부모 객체의 인스턴스 변수를 사용할때는 super키워드를 이용하면 된다.

     

    class SuperClass{
    	int num = 50;
    }
    
    class SubClass enxteds SuperClass{
    	int num = 100;
        void printNum(){
        	System.out.println(num); // 서브 클래스의 num 값인 100 출력
            System.out.println(super.num); // 슈퍼 클래스의 num 값인 50 출력
        }
    }

     

    super 키워드의 사용 2 - 부모 클래스의 생성자를 호출
    class SuperClass{
    	int x = 10;
        int y = 20;
        SuperClass(int x, int y){
        	this.x = x;
            this.y = y;
        }
    }
    class SubClass extends SuperClass{
    	int z = 30;
        SubClass(int x, int y, int z){
        	super(x, y);	//부모 클래스의 매개변수 x,y를 포함한 생성자 호출
            this.z = z;
        }
    }

     

     

    super 키워등의 사용 3 - 부모 클래스의 메소드를 호출 할 때 사용
    class SuperClass{
    	void printImp(){
        	System.out.println("SuperClass의 printImp() 호출");
        }
    }
    class SubClass extends SuperClass{
    	void printImp(){
        	super.prinImp();	// 부모클래스의 printImp 메서드 호출
        	System.out.println("SubClass의 printImp() 호출");
        }
    }

     

    출력 결과

    SuperClass의 printImp() 호출

    SuperClass의 printImp() 호출

    SubClass의 printImp() 호출

     

     

    728x90
    반응형

    댓글

Designed by Tistory.