본문 바로가기
Backend/Java

Java - 상속

by 퐁고 2023. 2. 19.
반응형

상속

  • 부모 클래스의 필드와 메서드를 자식 클래스에게 물려주는 것
  • 자바는 다른 언어와 달리 다중 상속을 허용하지 않는다. 단 하나의 부모클래스가 와야 한다.
public class 자식클래스 extends 부모클래스{}

업캐스팅

  • 자식 객체를 부모의 타입으로 해석하는 것
  • 다양한 객체들을 부모의 타입으로 관리할 수 있다.
Animal a = new Dog();
Animal b = new Cat();
Animal c = new Horse();

Animal[] animals = new Animal[]{a,b,c};

자동 타입 변환

  • 자식 클래스는 부모 클래스로 자동 타입 변환할 수 있다
Cat cat = new Cat();
Animal animal = cat; // new Cat();
  • 부모 타입으로 자동 타입 변환된 이후는 부모 클래스에 선언된 필드와 메서드에만 접근 가능하고, 자식 클래스의 필드나, 메서드는 접근 불가능하다.
  • 단, 자식 클래스에서 오버라이딩한 메서드가 있다면 부모 메서드대신 오버라이딩된 메서드가 호출된다.

강제 타입 변환

  • 부모 타입 클래스를 자식 타입 클래스로 강제 변환하는 것
  • 부모 타입으로 자동 변환을 한 후 다시 자식 타입으로 변환할 때 사용 가능하다. 그 외에는 불가능
  • 자식 객체가 부모 타입으로 자동 변환하면 부모 타입에 선언된 필드와 메서드만 사용 가능하다는 제약이 있는데 자식 타입에 선언된 필드나 메서드를 꼭 사용하고 싶을 때 강제 타입 변환을 해준다.

다형성

  • 서로 다른 자식 클래스가 부모 클래스 메서드를 오버라이딩하고 있을 때 오버라이딩된 메서드의 내용은 각자 다르게 나오는 것
  • 다형성을 구현하기 위해서는 자동 타입 변환과 메서드 오버라이딩이 필요하다.
  • 주로 필드보다는 메서드를 호출할 때 많이 발생한다.

추상 클래스

  • 객체를 생성할 수 있는 클래스를 실체 클래스라 한다면, 이 클래스들의 공통적인 필드나 메서드를 추출해서 선언한 클래스를 추상 클래스라 한다.
  • 추상 클래스는 실체 클래스의 부모 역할을 한다. 즉, 추상 클래스를 상속해서 공통된 필드나 메서드를 물려받을 수 있다.
    • 새로운 실체 클래스를 만들기 위한 부모 클래스로만 사용 extends 뒤에만 올 수 있다.

추상 클래스 선언

  • 클래스 선언에 abstract 키워드
  • new 연산자를 사용해서 객체를 직접 만들지 못하고 상속을 통해 자식 클래스만 만들 수 있다.
public abstract class 클래스명{
		// 필드
		// 생성자
		// 메서드
}

추상 메서드

  • 자식 클래스들이 가지고 있는 공통 메서드를 뽑아 추상 클래스로 작성할 때, 선언부만 동일하고 내용은 자식 클래스마다 달라야하는 경우가 많다.
// abstract 리턴타입 메서드명(매개변수);

public abstract class Animal{
		// 필드
		// 생성자
		// 메서드 abstract void sound();
}

댓글