본문 바로가기
Java/Java 학원 복습

자바 상속 - 학원

by code2772 2022. 10. 3.

[ 목차 ]

    728x90
    반응형

    상속(inheritance)

    1. 기존에 선언된 클래스의 멤버(생성자는 제외)를 새롭게 만들 클래스에서

    사용하고 싶을 때 상속을 받고 새로운 기능만 추가한다.

    2. 여러 클래스 선언 시 멤버가 겹치는 경우, 부모 클래스를 먼저 선언하고

    공통멤버를 자식 클래스에게 상속해준다.

    상속 문법

    class Parents{

    Parents멤버

    }

    class Child extends Parents{

    Parents, Child 멤버

    }

    super : 부모의 참조값

    부모의 멤버에 접근할 때 사용한다.

    super() : 부모 생성자

    자식 클래스 타입의 객체로 부모 필드에 접근할 수 있다.

    우리는 객체를 만들 때 자식 생성자만 호출하기 때문에, 자식 필드만 메모리에

    할당된다고 생각할 수 있다.

    ex)Child ch = new Child();

    그러나 자식 생성자는 항상 부모 생성자를 호출하기 때문에 자식 생성자 호출 시

    부모와 생성자도 호출되며 이는 자식의 필드를 초기화 할 때 부모 필드도 초기화

    하는 것을 의미한다.

    즉, 자식객체를 생성하게 되면 부모 객체도 생성하게 된다.(부모가 먼저 생성)

    부모 생성자를 호출하는 방법은 super()를 사용하면 된다.

    만약, super()를 작성하지 않더라도 컴파일러가 자동으로 작성해준다.

    다형성(polymorphism)

    1.오버로딩

    2. 오버라이딩(재정의)

    부모 클래스에 정의한 메소드를 자식 클래스에서 수정해서 사용하고 싶다면

    오버라이딩을 하면된다.

    이때 메소드명, 매개변수, 반환타입은 부모의 메소드와 동일해야한다.

    오버로딩 - 같은 클래스 내에서 생서자 또는 메소드를 같은 이름으로 매개변수의

    타입이나 수만 다르게 만든다. 반환타입은 오버로딩에 영향을 주지

    않는다.

    오버라이딩 - 상속 관계를 맺은 자식클래스에서 부모클래스의 메소드를 재정의

    한다.

    반환타입, 이름, 매개변수까지 모두 동일해야한다.

    RPG게임

    1. 마법사 2. 전사 3. 로그

    hp/mp hp/mp hp/mp

    15/30 30/10 20/20

    1. 일반공격

    1만큼 피해 5만큼 피해 3만큼 피해

    hp -2 mp -3

    2. 스킬공격

    30만큼 피해 15만큼 피해 20만큼 피해

    mp -10 mp -3 hp-5,mp-2

    3. 특수공격

    3초동안 기다렸다가 5초동안 기다렸다가 1초동안 기다림

    100 피해 100 피해 20~100랜덤

    mp, hp -10 hp -10 피해

    hp가 0이면 부활(hp, mp 가득 찬 상태로)

    mp가 스킬 사용하기 위한 값보다 적으면 스킬 사용 불가능

    -------------------------------------------------------------------

    접근 권한 제어자(접근자)

    default : 다른 패키지에서 접근 불가 (접근제어자 생략시 자동으로 default가 됨)

    public : 모든 곳에서 접근 가능, 대표 클래스를 의미할 때 사용

    protected : 다른 패키지에서 접근 불가, 자식은 허용

    private : 다른 클래스에서 접근 불가, 메소드로만 접근하자!(getter, setter)

    --------------------------------------------------------------------

    Casting

    up casting : 자식 값을 부모 타입으로 형변환

    down casting : up casting된 객체를 자식 타입으로 형변환

    ※ 부모 값을 자식 타입으로 형변환 시 오류

    Casting을 사용하는 이유

    모든 자식 값을 전달받기 위해서는 동일한 타입의 저장공간으로 받아야 한다.

    하지만 자식끼리는 서로 타입이 다르기 때문에 한 번에 전달받을 수가 없다.

    이 때 up casting을 사용하면, 모든 자식이 부모 타입이므로 하나의 저장공간에

    모든 자식을 받을 수 있게 된다.

    만약 up casting으로 자식 값을 전달받았다면, 자식에서 새롭게 구현한 기능들은 사용할 수 없기 때문에

    down casting을 통해서 복구하고 사용한다.

    객체 간 타입 비교

    instanceof

    a instanceof A : 조건식, 참 또는 거짓 중 하나가 나오는 식

    - a 가 A 타입이면 true

    - a 가 A 타입이 아니면 false

    반응형