본문 바로가기

프로그래밍/Java

상속

extends사용

public class B extends A{
    
}

 

상속 특징

Java에서 다중상속(자식기준)을 지원 X

하나 이상의 부모를 둘 수 없다

여러 자식을 두는 것은 가능

 

부모 클래스에서 private 접근제한자가 붙은

필드와 메소드는 상속에서 제외

 

자식객체만 생성하더라도

부모객체가 먼저 생성된 후에 

자식객체 생성

 

public class A{
    A(){
        System.out.println("A Class");
    }
}
public class B extends A{
    B(){
        System.out.println("B Class");
    }
}
public class Test{
    public static void main(String[] args){
        B b = new B();
    }
}

Test main 실행결과

Test에서 자식 Class인 B Class만 호출했는데

A Class가 먼저 생성된 뒤 B Class가 생성된 것을 볼 수 있다

사실 B Class 내부에 부모 Class를 생성하는

super();라는 기본 생성자를 생성한다

 

부모의 기본생성자 super()

super()는 반드시 자식 생성자 첫줄에 위치

 

public class A{
    String name;
    String ssn;
    A(String name, String ssn){
        this.name=name;
        this.ssn=ssn;
    }
}
public class B extends A{
    int num;
    B(String name, String ssn, int num){
        super(name,ssn);
        this.num=num;
    }
}
public class Test{
    public static void main(String[] args){
        B b = new B("홍길동","123456-1234567",1);
        System.out.println(b.name);//부모에서 상속받은 필드
        System.out.println(b.ssn);//부모에서 상속받은 필드
        System.out.println(b.num);
    }
}

 

메소드 재정의

 

부모의 메소드를 자식 Class에서 재정의 하는 것

 

-부모의 메소드와 동일한 시그니처

-접근 제한을 더 강하게 재정의 할 수 없음(반대는 가능)

 

부모의 메소드가 자식 Class에서 재정의 되었다면

자식타입으로 생성된 객체에서 사용되는 메소드는

재정의된 메소드

부모의 메소드를 호출하고 싶다면

super.부모메소드()

이렇게 해출해야한다

 

final 클래스와 메소드

이는 상속과 관련

final이 붙은 클래스는 상속이 불가능

ex) public final class 클래스{...}

 

final이 붙은 메소드는 재정의 불가능

ex) public final 리턴타입 메소드(){...}

'프로그래밍 > Java' 카테고리의 다른 글

추상 클래스  (0) 2019.12.04
타입 변환과 다형성  (0) 2019.12.04
final필드와 상수  (0) 2019.12.03
싱글톤  (0) 2019.12.03
정적 멤버, 메소드  (0) 2019.12.03