Java #5

황현근·2023년 5월 2일
0

Acorn-Academy

목록 보기
15/28
post-thumbnail

상속 (Extends)

  • 객체지향 프로그래밍에서는 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다.

  • 장점
    • 유지보수가 쉬워짐
    • 확장성이 용이해짐
    • 재사용이 가능해짐
    • 코드가 간결해짐
    • 개발 시간을 단축할 수 있음

  • 자바의 상속 방식

  • 클래스 간의 상속은 여러 개의 부모의 정보를 상속하는 다중 상속 방식을 제외하고는 모두 허용하고 있다.

  • 자바 상속 방법(Extends)
//부모 클래스 생성
class 부모{		}

//부모 클래스 상속
class 자식 extends 부모{		}
  • 부모 클래스의 private 접근 제한을 갖는 필드 및 메소드는 자식이 물려받을 수 없다.

  • 부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의 default 접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없다.

💡 super

super 키워드

  • 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수다.
  • super 키워드는 자식 클래스에서 부모 클래스를 가리킬 때 사용하는 키워드다.
  • 부모 클래스의 멤버와 자식 클래스의 멤버 이름이 같을 경우 super 키워드를 사용하여 구별할 수 있다.
  • 👉 부모 클래스의 멤버에 접근할 때 사용 !

사용 예시

class Parent { int a = 10; }

class Child extends Parent {
    void display() {
        System.out.println(a);
        System.out.println(this.a);
        System.out.println(super.a);
    }
}


public class Inheritance02 {

    public static void main(String[] args) {
        Child ch = new Child();
        ch.display();
    }
}

--------- 실 행 결 과 ---------
10
10
10

super() 메소드

  • this( ) 메소드가 같은 클래스의 다른 생성자를 호출할 때 사용된다면, super( ) 메소드는 부모 클래스의 생성자를 호출할 때 사용된다.
  • 부모 클래스의 멤버를 초기화하기 위해서는 자식 클래스의 생성자에서 부모 클래스의 생성자까지 호출해야 한다.
  • 만약 자식 클래스의 생성자에 부모 클래스의 생성자가 지정되어 있지 않다면, 컴파일러가 자동으로 부모 클래스의 기본생성자를 호출한다.
    (이 경우에 부모클래스에 매개변수가 있는 생성자만 있고, 기본생성자가 없어 기본생성자를 호출할수 없다면 "에러"가 발생합니다.)
 super();          //이렇게 사용하면 된다!

사용 예시

class Parent {
   int a;
   Parent() { a = 10; }
   Parent(int n) { a = n; }
}
class Child extends Parent {
   int b;
   Child() {
       super();
       b = 20;
   }
  • super( )는 생성자 코드 안에서 사용 될 때, 다른 코드에 앞서 첫 줄에 사용되어야 한다.

📌 Abstract Class(추상 클래스)

  • 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 한다.
  • 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해줍니다.
  • 즉, 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의해야 한다.
abstract class 클래스이름 {
    ...
    abstract 반환타입 메소드이름();
    ...
}
  • 추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로, 인스턴스를 생성할 수 없다.
  • 추상 클래스는 먼저 상속을 통해 자식 클래스를 만들고, 만든 자식 클래스에서 추상 클래스의 모든 추상 메소드를 오버라이딩하고 나서야 비로소 자식 클래스의 인스턴스를 생성할 수 있게 된다.
  • 추상 메소드를 선언하여 사용하는 목적은 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함이다.

0개의 댓글