본문 바로가기
Language/JAVA

[JAVA] 상속 1~6 Inheritance , overriding , overloading , super

by 아이엠제니 2022. 2. 10.

부스트코스 생활코딩 [쉽게 배우는 자바2] 공부 기록

 

 

1. 수업소개

class나 instance가 무엇인지는 알고 참여해야 한다.

package javaChapter2_11;

class Cal {
    public int sum(int v1, int v2) {
        return v1 + v2;
    }
}

class Cal3 extends Cal { // extends 상속, Cla에 있는 모든 메소드와 변수를 상속받게 됨

}

public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal();
        System.out.println(c.sum(2, 1));

        Cal3 c3 = new Cal3();
        System.out.println(c3.sum(2, 1)); //c3 인스턴스에 sum 메소드를 호출해줘
    }
}

class Cal2 {
    public int sum(int v1, int v2) {
        return v1 + v2;
    }

    public int minus(int v1, int v2) {
        return v1 - v2;
    }
}

상속

재사용성을 높이고, 유지보수의 편의성을 높이고, 가독성을 높이고, 코드의 양을 줄이는 목적 달성 !!

 

 

 

2. 기능의 개선과 발전

-부모클래스 (superclass)

-자식클래스 (subclass)

-재정의 (override)

package javaChapter2_11;

class Cal {
    public int sum(int v1, int v2) {
        return v1 + v2;
    }
}

class Cal3 extends Cal { // extends 상속, Cla에 있는 모든 메소드와 변수를 상속받게 됨
    public int minus(int v1, int v2) {
        return v1 - v2;
    }
    // Overriding 재정의
    public int sum(int v1, int v2) {
        System.out.println(("Cal3!!"));
        return v1 + v2;
    }
}

public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal();
        System.out.println(c.sum(2, 1));

        Cal3 c3 = new Cal3();
        System.out.println(c3.sum(2, 1)); //c3 인스턴스에 sum 메소드를 호출해줘
        System.out.println(c3.minus(2, 1));
        System.out.println(c3.sum(2, 1));
    }
}

부모클래스가 정의한 것을 자식클래스가 재정의할 수 있다!

그게 바로 overriding.

 

 

 

3. Overriding, Overloading

오버로딩은 상속과는 상관이 없다.

package javaChapter2_11;

class Cal {
    public int sum(int v1, int v2) {
        return v1 + v2;
    }
    // Overloading
    public int sum(int v1, int v2, int v3) {
        return v1 + v2 + v3;
    }
}

class Cal3 extends Cal { // extends 상속, Cla에 있는 모든 메소드와 변수를 상속받게 됨
    public int minus(int v1, int v2) {
        return v1 - v2;
    }

    // Overriding 재정의
    public int sum(int v1, int v2) {
        System.out.println(("Cal3!!"));
        return v1 + v2;
    }
}

public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal();
        System.out.println(c.sum(2, 1));
        System.out.println(c.sum(2, 1, 1));

        Cal3 c3 = new Cal3();
        System.out.println(c3.sum(2, 1)); //c3 인스턴스에 sum 메소드를 호출해줘
        System.out.println(c3.minus(2, 1));
        System.out.println(c3.sum(2, 1));
    }
}

overloading은 같은 클래스 안에서는 이뤄질 수 없다.

상속 관계를 가진 클래스 사이에서 이뤄질 수 있다.

 

 

 

4. This Super

package javaChapter2_11;

class Cal {
    public int sum(int v1, int v2) {
        return v1 + v2;
    }

    // Overloading
    public int sum(int v1, int v2, int v3) {
        return this.sum(v1, v2) + v3;
    }
}

class Cal3 extends Cal { // extends 상속, Cla에 있는 모든 메소드와 변수를 상속받게 됨
    public int minus(int v1, int v2) {
        return v1 - v2;
    }

    // Overriding 재정의
    public int sum(int v1, int v2) {
        System.out.println(("Cal3!!"));
        return super.sum(v1, v2);
    }
}

public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal();
        System.out.println(c.sum(2, 1));
        System.out.println(c.sum(2, 1, 1));

        Cal3 c3 = new Cal3();
        System.out.println(c3.sum(2, 1)); //c3 인스턴스에 sum 메소드를 호출해줘
        System.out.println(c3.minus(2, 1));
        System.out.println(c3.sum(2, 1));
    }
}

this는 자기 자신

super는 부모 클래스

super를 이용해서 부모 클래스의 변수와 메소드에 접근 가능

 

 

 

5. 상속과 생성자

package javaChapter2_11;

class Cal {
    int v1, v2;

    Cal(int v1, int v2) {
        System.out.println("Cal init!!");
        this.v1 = v1;
        this.v2 = v2;
    }

    public int sum() {
        return this.v1 + v2;
    }
}

class Cal3 extends Cal {

    Cal3(int v1, int v2) {
        super(v1, v2); // super는 부모 클래스의 생성자
        System.out.println("Cal3 init!!");
    }

    public int minus() {
        return this.v1 - v2;
    }
}

public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal(2, 1);
        Cal3 c3 = new Cal3(2, 1);

        System.out.println(c3.sum()); // 3
        System.out.println(c3.minus()); // 1
    }
}

 

 

 

6. 수업을 마치며

상속이나 오버라이딩, 오버로딩 등등

설명을 너무나도 잘 해주셔서 이해는 잘 된다.

다만 내가 실제 코드를 짰을 때, 그걸 내가 구현할 수 있나? 그건 다른 문제!

 

문득 이전에 낭비했던 내 시간들이 아깝다는 생각을 하게 된다.

다시 열심히 해야지.

300x250