Java - Inheritance

class의 기본에 대해서

Posted by Yan on March 10, 2021

상속 Inheritance : extends

  • 기존의 클래스로 새로운 클래스를 작성하는 것(재사용)
  • 자손은 조상의 모든 멤버를 상속받는다 (생성자, 초기화블럭 제외)
  • 자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다)

포함 composites

  • 클래스의 멤버로 참조변수를 선언하는 것
  • 작은 단위의 클래스를 만들고 이들을 조합해서 클래스를 만든다
1
2
3
4
class Car {
    Engine e = new Engine();
    Door[] d = new Door[4];
}

main class에서 engine이나 door를 쓰려면

1
2
3
Car c = new Car();
c.e.x = 1; //engine 클래스에 있는 x라는 변수를 가리킨 것
c.d.y = 2; //door 클래스에 있는 y라는 변수를 가리킨 것

위와 같이 레이어가 한 개 더 바로

단일 상속

  • 자바는 단일 상속만 허용한다 = 부모는 하나만 있어야 한다
  • 따라서 비중이 높은 클래스 하나만 상속 관계로 하고, 나머지는 포함관계로 한다.

Object 클래스 : 모든 클래스의 조상

  • 부모가 없는 클래스는 자동적으로 object클래스를 상속받게 된다.
  • 모든 클래스는 object클래ㅐ스에 정의된 11개의 메소드를 상속받는다.

오버라이딩

  • 상속받은 조상 메소드를 자신에 맞게 변경하는 것
  • 선언부는 조상 클래스의 메소드와 일치해야 한다.
  • 접근 제어자를 조상 클래스의 메소드보다 좁은 범위로 변경할 수 없다.(public, protected, private)
  • 예외선언문은 조상 클래스의 메소드보다 많이 선언할 수 없다.

참조변수 super

  • 객체 자신을 가리키는 참조변수
  • 인스턴스 메소드(생성자)내에서만 존재. static 메소드 내에서는 사용 불가
  • 조상의 멤버와 자신의 멤버를 구별할 때 사용
  • 조상의 멤버에 super.변수를 쓰고, 자신의 멤버에 this.변수를 쓴다.
  • 만약 this.변수가 없는 경우, super.변수가 this.변수에도 들어가서 둘 다 같은 값이 된다.

super() 조상의 생성자

  • 조상의 생성자를 호출할 때 사용
  • 조상의 멤버는 조상의 생성자를 호출해서 초기화
  • 생성자의 첫줄에는 반드시 생성자를 호출해야 한다
  • 첫줄에 생성자 호출 안하면 컴파일러가 자동으로 추가한다.

제어자 modifier

  • 클래스와 클래스의 멤버에 부가적인 의미 부여
  • 하나의 대상에 여러 제어자를 같이 사용 가능 (접근제어자는 하나만)

static

  • 클래스의 , 공통적인
  • 객체 없이 사용 가능