프로그래밍/JAVA

[JAVA] 상속 예제

노력의천재 2020. 7. 26. 02:23
public class ParentClass {

    int openYear = 1995;

    public ParentClass() {
        System.out.println("부모 클래스 생성자");
    }

    public void parentFun() {
        System.out.println("parentFun()");
    }

    private void privateFun() {
        System.out.println("privateFun()");
    }

    public void makeJJajang() {
        System.out.println("makeJJajang() START");
    }
}

 

public class FirstChildClass extends ParentClass {

    int openYear = 2010;

    public FirstChildClass() {
        System.out.println("FirstChildClass 생성자");
    }

    public void firstChildFun() {
        System.out.println("firstChildFun()");
    }

    // 메소드 오버라이드(Override)
    @Override
    public void makeJJajang() {
        System.out.println("firstChildClass makeJJajang() START");
    }

    // 상위 클래스를 호출할 때 super 키워드를 사용
    public void getOpenYear() {
        System.out.println("firstChildClass Open Year : " + this.openYear);
        System.out.println("parentClass Open Year : " + super.openYear);
    }
}

 

public class SecondChildClass extends ParentClass {

    public SecondChildClass() {
        System.out.println("SecondChildClass 생성자");
    }

    public void secondChildFun() {
        System.out.println("secondChildFun()");
    }

    // 메소드 오버라이드(Override)
    @Override
    public void makeJJajang() {
        System.out.println("secondChildClass makeJJajang() START");
    }
}

 

/* 20200906 - 상속 스터디 */

public class MainClass {
    public static void main(String[] args) {

        FirstChildClass firstChild = new FirstChildClass();
        firstChild.parentFun();
        firstChild.firstChildFun();
        /* 출력 순서
            부모 클래스 생성자
            자식 클래스 생성자
            parentFun()
            firstChildFun()
         */

        // 부모클래스에 private으로 선언된 메소드는 자식 클래스가 접근할 수 없음
        // firstChild.privateFun();

        // 클래스도 자료형이므로 다음과 같이 배열 형태로 사용가능
        // 부모 클래스 배열에 자식 클래스 객체를 담을 수 있다.
        ParentClass[] pArr = new ParentClass[2];
        ParentClass fch = new FirstChildClass();
        ParentClass sch = new SecondChildClass();
        pArr[0] = fch;
        pArr[1] = sch;

        for(int i=0;i<pArr.length;i++) {
            pArr[i].makeJJajang();
        }

        firstChild.getOpenYear();

    }
}

 

추가로 알게된 점

Object 클래스는 모든 클래스의 상위 클래스이므로 즉 모든 클래스의 부모 클래스라고 할 수 있다.