ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java 상속
    개인 공부/java 2021. 6. 29. 07:44
    728x90
    반응형

    상속이란

    상속이란 부모가 보유하는 것을 자식이 물려 받는 것을 의미한다. java에서도 같은 의미인데 이는 확정성과 직결되는 의미를 지닌다.

    java는 단일 상속

    java는 단일 상속만을 지원하며 다중 상속은 지원하지 않는다. 다른 언어들은 다중 상속이 지원하는 경우가 있지만 java는 완전한 객체지향 개념에는 다중 상속이 필요치 않다고 보고 있다. 또한 다중 상속을 지원하게 되면 생성되는 객체의 명확성이 떨어지게 된다. 그래서 자바에서 상속은 특정 클래스가 가지는 일부 속성과 기능을 다른 새로운 클래스에 제공하기 위해 맺는 클래스간의 관계를 말한다. 또한 클래스간의 상속이란 extends 예약어를 통해 부모클래스(super class)를 자식 클래스(sub class)로 관계를 맺는 것인데 만약 상속을 받지 않았다면 java 최상위 클래스인 object를 묵시적으로 상속받는다.

    클래스 상속의 장점

    클래스 상속은 객체의 재사용과 코드의 간결성을 제공한다.

    class Good{
        long id;
        String name;
        int price;
    
        public void setName(String name){
            this.name = name;
        }
        public void setPrice(int price){
            this.price = price;
        }
        public long getId(){
            return this.id;
        }
        public String getName(){
            return this.name;
        }
        public int getPrice(){
            return this.price;
        }
    }

    다음과 같이 상품에 대한 클래스가 있을때

    class Book extends Good{
        String author
    
        public Book(String name, int price, String author){
            ...
        }
    }

    다음과 같이 자식 클래스인 Book이 부모 클래스의 Good을 상속받아 필요 멤버들을 사용할 수 있게 되었다. 이렇게 상속 받은 자식 클래스는 부모 클래스의 멤버와 메서드를 상속받아 사용하므로 코드의 재사용성이 증가되고 또한 부모 클래스의 정의된 코드들을 또 사용하지 않으므로 코드 또한 간결해지는 장점이 있다.

    오버라이딩

    오버라이딩의 대한 개념은 이미 알고 있다. 메서드의 재정이라 불리며 super 클래스가 가지는 메서드를 sub 클래스에서 똑같이 새롭게 만들게 되면 더 이상 super 클래스에서 이름이 같은 메서드를 호출할 수 없다. 이를 오버라이딩이라 부르고 상속 관계에서는 '멤버 은폐'라고도 한다.

    super, super()

    super는 앞서 배운 this를 떠올리면 쉽게 이해할 수 있다. this는 해당 객체를 참조하는 참조변수다. super라는 참조변수는 현재 객체의 바로 위의 부모 클래스를 참조하는 참조변수인 것이다.

    super()란 그럼 무엇일까? super는 위에서 말한것 처럼 부모 클래스를 의미하고 super()는 부모 클래스의 생성자를 의미한다.

    class Parent{
        public Parent(int n){
            System.out.println("부모 클래스 "+n);
        }
    }
    class SubClass extends Parent{
        public SubClass(){
            super(3);
            System.out.println("자식 클래스");
        }
    
        public static void main(String[] args){
            SubClass sub = new SubClass();
        }
    }

    위 코드를 실행하면

    다음과 같은 결과를 확인할 수 있으며 super()가 부모 클래스의 생성자임을 확인할 수 있다.

    728x90
    반응형
Designed by Juno.