본문 바로가기
Java

상속

by asd135 2024. 5. 2.
728x90

자바는 extends 키워드를 사용하여 상속할 수 있다.

class A {

}

class B extneds A {

}

 

상속 관계에서 생성자 호출 순서

부모 클래스의 생성자 먼저 호출이 되고 그다음 자식 클래스의 생성자가 호출된다.

class A{
    A(){
        System.out.println("부모클래스 생성자");
    }
    A(int a){
        System.out.println("부모클래스 매개변수 생성자" + a);
    }
}

class B extends A{
    B(){
        super(1); //첫 번째 줄에 위치해야함
        System.out.println("자식 생성자");
    }
}

public class test {

    public static void main(String[] args) {
        B b = new B();
    }
}

 

super() 메서드를 사용하여 인자 값에 맞는 부모의 생성자를 명시적으로 호출할 수 있다.

super() 메서드는 생성자 내에서 가장 첫 번째 줄에 위치해야 한다.

 

메서드 오버라이딩

상속받은 메서드를 자식클래스에서 재정의 하는 것

import java.util.Scanner;
class A{
    A(){
        System.out.println("부모클래스 생성자");
    }
    A(int a){
        System.out.println("부모클래스 매개변수 생성자" + a);
    }

    public void print() {
        System.out.println("A클래스 메서드");
    }
}

class B extends A{
    B(){
        super(1);
        System.out.println("자식 생성자");
    }

    public void print(){
        System.out.println("재정의한 B클래스 메서드");
    }
}

public class test {

    public static void main(String[] args) {
        B b = new B();
        b.print();
    }
}

 

업캐스팅

자식 클래스의 객체를 부모 클래스의 참조 변수로 참조하는 것

import java.util.Scanner;
class A{
    A(){
        System.out.println("부모클래스 생성자");
    }
    A(int a){
        System.out.println("부모클래스 매개변수 생성자" + a);
    }

    public void print() {
        System.out.println("A클래스 메서드");
    }
}

class B extends A{
    B(){
        super(1);
        System.out.println("자식 생성자");
    }

    public void print(){
        System.out.println("재정의한 B클래스 메서드");
    }
    
    public void printB() {
        System.out.println("B클래스 메서드");
    }
}

public class test {

    public static void main(String[] args) {
        B b = new B();
        A a = new B(); // 업캐스팅
        b.print();
        a.print();
        //a.printB() 자식 클래스 메서드 사용불가
    }
}

 

자식 객체를 생성하고 부모의 참조 변수로 참조하면 자식의 멤버 변수, 메서드는 사용할 수 없다.

오버라이딩한 경우 자식 객체의 메서드가 실행된다.

'Java' 카테고리의 다른 글

Java 어노테이션  (0) 2025.04.06
자바 클래스  (0) 2024.06.17
추상클래스, 인터페이스  (0) 2024.05.23
자바에서 메소드 내부에 메소드를 못 만드는 이유  (1) 2023.10.19