본문 바로가기
JAVA

ep 04-2. 상속과 다형성

by L_SU 2022. 11. 27.

상속

- 클래스를 정의할 때 이미 구현된 클래스를 상속 받아

  속성이나 기능이 확장되는 클래스를 구현하는 것

 

방법

class B(하위 클래스) extends A(상위 클래스){ }

 

Example.java

public class Example{
    int a = 10;
    public int getA(){
        return a;
    }
}

Main.java

 

public class Main extends Example
{
    
	public static void main(String[] args) {
	    Example example1 = new Example();
	    int b = example1.getA() + 10;
	    System.out.println(b);	        
	    }
}

// 결과
// 20

 

개념

  • 상위 클래스는 비교적 일반적인 의미,
    하위 클래스는 비교적 구체적인 의미를 가짐
  • extends 뒤엔 하나의 class만 사용 가능
  • super 예약어
    this가 자신의 인스턴스 주소를 가지는 것처럼
    하위클래스가 상위클래스에 대한 주소를 가지게 됨
    하위클래스가 상위클래스에 접근할 때 사용함 

업캐스팅

상위 클래스형으로 변수를 선언,

하위 클래스 인스턴스 생성

 

Animal A = new Cat();

☝️상위 클래스  ☝️하위 클래스

- Cat() 생성자의 호출로 인스턴스는 모두 생성,

- 타입이 Animal로 접근할 수 있는 변수나 메서드는 Animal의 변수와 메서드

 

메서드 오버라이딩

상위 클래스에서 정의된 메서드를 하위메서드에서 재정의 하는 것

  • @Override
    재정의된 메서드
  • @FunctionalInterface
    함수형 인터페이스
  • @Deprecated
    버전이 업그레이드 되면 사용되지 않을 수도 있는 변수 or 메서드
  • @SupperessWarnings
    특정 경고가 나타나지 않게 함

다형성

- 하나의 코드가 여러가지 자료형으로 구현돼 실행디는 것

- 정보은닉, 상속 등과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나

- 객체지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징

명제 네가지

- 부모 타입은 자식 객체를 참조할 수 있음

- 자식 타입은 부모 객체를 참조할 수 없음

- 타입은 메서드를 호출할 수 있냐 없냐만 결정(= 자신이 알고 있는 메서드만 호출 가능)

- 자식은 부모보다 커질 수 있지만, 작아질 순 없다.

다운 캐스팅 - instanceof

- 하위 클래스가 상위 클래스로 형 변환되는 것은 묵시적으로 이뤄짐

- 다시 원래 자료형인 하위 클래스로 형 변환 하려면 명시적으로 다운 캐스팅을 해야함

- 이때 원래 인스턴스의 타입을 체크하는 예약어가 instanceof

 

Animal baby = new Cat();
if(baby instanceof Cat){ // baby의 인스턴스 자료형이 Cat형이라면
	Cat cat = (Cat)baby; //인스턴스 baby를 Cat형으로 다운캐스팅함
}

'JAVA' 카테고리의 다른 글

ep 05-1.추상 클래스  (0) 2022.12.02
ep 04-3. 문제풀이3  (0) 2022.11.27
ep 04-1. 배열과 ArrayList  (0) 2022.11.27
ep 03-4. 문제 풀이2  (0) 2022.11.20
ep 03-3. 클래스와 객체2  (0) 2022.11.20