1.9.4 매깨고?? member말이다

yeonseong Jo·2023년 4월 25일
0

SEB_BE_45

목록 보기
14/47
post-thumbnail

상속 하니 유산이 생각나고 유산 하니 이거 밖에 생각이 안났다..

오늘은
java
의 꽃인 oop
의 꽃인 상속을 배웠다.
(사실 추상화도 배움 담에 기술)

django를 다루면서 상속이야 밥먹듯이 했지만,
java의 상속은 python의 상속과 조금 다른 부분이 있다.
그래서 이 상속에 대해 정리하고 새로 알게 된 점을 얘기하고자 한다.

Inheritance

class Parent{
	int a = 0;
	...
}

class Child extends Parent {
	int a = 1;
    ...
    void print(){
    	System.out.println(a);
        // 1
        System.out.println(super.a);
        // 0
    }
}

java에서 상속은
class 명 뒤에 "extends" 키워드 + 부모 class명으로 진행한다.
또한 자식 class는 하나의 부모 class를 상속할 수 있고,
"super"키워드를 통해 부모 class에 접근이 가능하다.

instance화

이전에 배웠듯이
class안에 따로 생성자가 없더라도,
compile 과정때 알아서 생성이 된다고 했었다.
이는 상속에서도 마찬가지인데,

class Parent{
	...
	public Parent(){
    	System.out.println("parent's constructor");
    }
}

class Child extends Parent {
	...
    public Child(){
    	System.out.println("child's constructor");
    }
}
public class Main{
	public static void main(String[] args){
    	Child c = new Child();
    }
}

Main실행 시 결과는

parent's constructor
child's constructor

이렇게 부모 class의 생성자를 실행한 뒤, 자식 class의 생성자를 실행하게 된다.
이는 instance를 생성할 때, class를 읽는 과정 때문인데,
new Child( )를 통해 class Child extends Parent 를 읽을 때,
상속 keyword인 extends를 통해 Parent를 생성한다.
그래서 Parent의 생성자를 실행

super()

super keyword는 부모 class를 상속한 자식 class에서
부모 class의 member에 접근하기 위해 사용하는 keyword이다.

class Parent{
	int a = 10;
	...
}
class Child extends Parent{
	// super == Parent
    // super() == Parent()
    int a = 100;
    public void print(){
    	int a = 1000;
    	System.out.println(a);
        // 1000
        System.out.println(this.a);
        // 100
        System.out.println(super.a);
        // 10
    }
}

위 코드에서 Child 안의 super는 부모 class인 Parent를 의미하며,
super( ) 역시 Parent( )와 동일하다.
(생성자 호출)

class Parent{
	...
	public Parent(){
    	System.out.println("parent's constructor");
    }
    public Parent(int x){
    	System.out.println("parent's constructor with parameter :" + x);
    }
}

class Child extends Parent {
	...
    public Child(){
    	super(3);
    	System.out.println("child's constructor");
    }
}
public class Main{
	public static void main(String[] args){
    	Child c = new Child();
    }
}

Main 실행 시 결과는

parent's constructor with parameter :3
child's constructor

이렇듯 일단 자식 instance를 생성하면,
부모의 생성자를 먼저 거친다는 것을 기억해야 할 것이다.

profile
뒤(back)끝(end)있는 개발자

0개의 댓글