본문 바로가기

코린이

혼공자 Chapter07. 상속 본문

자바/혼공 학습단 10기

혼공자 Chapter07. 상속

winsome99 2023. 7. 14. 17:18
반응형

chapter7 상속

07_1 상속

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

프로그램에서는 부모 클래스를 상위 클래스라고 하고 자식 클래스를 하위 클래스 또는 파생 클래스라고 부른다.

클래스 상속

class 자식클래스 extends 부모클래스{
//필드
//생성자
//메소드
}

자식클래스가 어떤 부모클래스를 상속받을 것인지 결정 후에 extends 뒤에 기술한다.

✨자바는 다중 상속을 허용하지 않아 여러 개의 부모 클래스를 상속할 수 없다.

메소드 재정의

부모 메소드를 자식 클래스에서 다시 정의하는 것을 말한다.

  • 부모의 메소드와 동일한 시그너처(메소드 이름, 매개 변수 목록)를 가져와야 한다.
  • 접근 제한을 더 강하게 재정의할 수 없다.

final 클래스와 final 메소드

final 키워드는 클래스, 필드, 메소드를 선언할 때 사용할 수 있는데, 해당 선언이 최종 상태이고 수정될 수 없음을 뜻한다.

상속할 수 없는 final 클래스

public final class 클래스{...}

final 클래스의 대표적인 예는 자바 API의 String 클래스이다.

public final class String{...}

다음과 같이 자식 클래스를 만들 수 없다.

public class NewString ~~(extends String)~~{...}

재정의할 수 없는 final 메소드

public final 리턴타입 메소드( [매개변수, ...] ){...}

메소드를 선언할 때 final 키워드를 붙이면 최종적인 메소드이므로 재정의를 할 수 없다.

public class Car{
	//필드
	public int speed;
	//메소드
	public void speedUp() {speed += 1;}
	
	//final 메소드
	public final void stop(){
	System.out.println("차를 멈춤");
	speed = 0;	
	}
}

public class SportCar extends Car{
	@Override
	public void speedUp() {speed += 10;}

	// 재정의를 할 수 없다.
	@Overide
	public void stop(){
	System.out.println("스포츠카를 멈춤");
	speed= 0;
	}
}

07_2 자동 타입 변환

자동 타입 변환은 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다.

자동 타입 변환의 개념은 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있다.

예를 들어 고양이가 동물의 특징과 기능을 상속받았다면 ‘고양이는 동물이다’가 성립

자동 타입 변환

Cat cat = new Cat();
Animal animal = cat;

강제 타입 변환

부모 타입을 자식 타입으로 변환하는 것을 말한다.

모든 부모 타입을 자식 타입으로 강제 변환할 수 있지는 않다. 자식 타입이 부모 타입으로 자동 타입 변환 후 다시 자식 타입으로 변환할 때 강제 타입 변환을 사용할 수 있다.

Parent parent = new Child(); //자동 타입 변환
Child child = (Child) parent; //강제 타입 변환

Child 객체가 Parent 타입으로 자동 변환된 상태에서 원래 Child로 강제 변환할 수 있다.

07_3 추상 클래스

객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다.

추상 클래스 선언

public abstract class 클래스{
	//필드
	//생성자
	//메소드
} 

추상 클래스를 선언할 때에는 abstract 키워드를 붙여야 한다.(abstract를 붙이면 new 연산자를 이용해서 객체를 만들지 못하고 상속으로만 클래스를 만들 수 있다.)

  • 추상 클래스도 일반 클래스처럼 필드, 생성자, 메소드 선언 가능
  • new연산자로 직접 호출이 불가능하지만 자식 개체가 생성될 때 super() 호출해 추상 클래스 객체를 생성한다.

다음은 추상 클래스의 간단한 예제이다.

// 추상 클래스
public abstract class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public abstract void makeSound();
}
// 실체 클래스
public class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println("야옹");
    }

    
}
public class Dog extends Animal{
    public Dog(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println("멍멍");
    }
}
// 실행 클래스
public class Main {
    public static void main(String[] args) {
        Animal cat = new Cat("야옹이");
        System.out.println("이름: " + cat.getName());
        cat.makeSound();

        Animal dog = new Dog("멍멍이");
        System.out.println("이름: " + dog.getName());
        dog.makeSound();
    }
}

실행결과

(적어야 할 내용은 많은데 그중에 중요한 내용만 적으라니깐 너무 어려웠습니다.. 많이 부족한 부분이 있을 수 있습니다.)

반응형

'자바 > 혼공 학습단 10기' 카테고리의 다른 글

혼공자 chapter10 예외 처리  (0) 2023.07.19
혼공자 chapter08 인터페이스  (0) 2023.07.15
혼공자 2주차 미션  (0) 2023.07.14
혼공자 Chapter06. 클래스  (0) 2023.07.14
혼공자 1주차 3장~5장(2)  (0) 2023.07.07
Comments