Languages/Java

[Java]상속(Inheritance)과 super, super() 완벽 이해하기

MoonSta 2023. 1. 19. 00:05

super, super() 완벽 이해하기

 Java 코드를 보다보면 super 키워드는 자주 등장합니다. 이번 포스팅에서는 super, super()에 대해 다뤄보려고 합니다. 하지만 위의 키워드를 이애하기 위해서는 객체지향프로그래밍 언어인 Java에 상속에 대해 먼저 알아야 합니다.

 

상속(Inheritance)이란?

 상속(Inheritance)은 기존 클래스의 멤버변수와 메서드를 이어 받아 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다. 

 

출처 : http://www.tcpschool.com/java/java_inheritance_concept

 

 위의 그림을 보면 부모 클래스로 부터 상속받아 생성된 자식 클래스가 부모 클래스를 포함하고 있는 것을 볼 수 있으며, 부모 클래스에 없는 추가된 멤버를 정의한 것을 확인할 수 있습니다.

 

상속(Inheritance) 예제 

class Parent {
    //접근 제어자 private으로 선언된 멤버 변수는 자식 클래스에서 접근 불가능
    private string phoneNumber = "010-1234-5678";
    
    public String address = "경기 안산시"; 
}


class Child extends Parent {
    public int age = 25; 
    void search () {
      //System.out.println(phoneNumber); 
       
       System.out.println(address);
       System.out.println(age);
  }
}

public class Inheritance {
    public static main(String[] args) {
        Child child = new Child();
        child.search();
    }
}

// --------------------------------------------------------------------------------
// 경기 안산시
// 25

 

상속(Inheritance)과 super 키워드의 관계?

 super 키워드는 자식 클래스에서 부모 클래스를 참조할 때 사용합니다. 자기 자신을 참조하는 this 키워드와 다른 개념이므로 예제를 통해 비교해보도록 하겠습니다.

 

2022.12.03 - [프로그래밍언어/JAVA] - [JAVA] this 키워드

 

[JAVA] this 키워드

⚡️this는 무엇일까? JAVA 소스를 보다 보면 this라는 단어가 많이 보인다. 과연 이 this의 의미는 무엇이며 어떻게 사용하냐에 대한 포스팅을 하려고 한다. ⚡️JAVA에서의 this란? JAVA에서의 this는 인

mooonstar.tistory.com

 

this, super 비교 예제

class Parent {

    public int = 20;
}

class Child extends Parent {
    public int age = 25; 
    void search () {
      
       //자식 클래스 참조
       System.out.println(this.age);
       //부모 클래스 참조
       System.out.println(super.age);
  }
}

public class Inheritance {
    public static main(String[] args) {
        Child child = new Child();
        child.search();
    }
}

// --------------------------------------------------------------------------------
// 20
// 25
this.age super.age
자기 자신 참조 부모 클래스 참조
결과값 : 20 결과값 : 25

 


this(), super() 비교 

  • this() : 같은 클래스의 다른 생성자를 호출할 경우 사용
  • super() : 자식 클래스에서 부모 생성자를 호출할 경우 사용

 

this(), super() 비교 예제

class Parent {

    public String addr;
    public int age;
    
    public Parent(String addr, int age0 {
        this.addr = addr;
        this.age = age;
    }
}

class Child extends Parent {
    
    public String addr;
    public int age;
    
    public Child(String addr, int age) {
        super(addr + " 상록구", age + 10);
        
        this.addr = addr;
        this.age = age;
    }
    
    void search () {
      
       System.out.println("Parent cLass : {" + addr + ", " + age + "}");
       System.out.println("Child cLass : {" + super.addr + ", " + super.age + "}");
);
  
       System.out.println(super.age);
  }
}

public class Inheritance {
    public static main(String[] args) {
        Child child = new Child("경기 안산시", 20);
        child.search();
    }
}

// --------------------------------------------------------------------------------
// Parent class : {경기 안산시, 20}
// Child class : {경기 안산시 상록구, 30}