JAVA) 상속(Inheritance)

EggYolk·2021년 6월 23일
0

JAVA

목록 보기
1/1
post-thumbnail

OOP의 특성 중 제일 중요하다고 생각되는 다형성.

그 다형성이 포함된 상속에 대해 공부해 보아요.
  1. 상속이란..
    현실 세계에서 누구나 알고 있는 부모가 자식에게 물려주는 행위.

    객체 지향 프로그램에선
    1) 자식(하위, 파생) 클래스가 부모(상위) 클래스의 멤버를 물려 받는것.
    2) 자식이 부모를 선택해서 물려받는다.

  2. 상속 개념의 활용

    1. 상속의 효과
      (1) 부모 클래스를 재사용해 자식 클래스를 빠르게 개발 가능하다.
      (2) 반복된 코드의 중복을 줄여준다.
      (3) 유지보수의 편리성 ↑
      (4) 객체 다형성 구현 가능
    2. 상속 대상을 제한
      (1) 부모 클래스의 private 접근제한자를 갖는 필드와 메소드는 제외된다.
      (2) 부모 클래스가 다른 패키지일때, default 접근제한자를 갖는 필드와 메소드는 제외된다.
  1. java는 단일 상속
    1. 부모 클래스를 나열할 수 없다.
    2. 하나의 클래스만 상속이 가능하다.
  1. 부모 생성자 호출(super(...))
    1. 부모클래스에 매개변수 인자가 없는 default 생성자가 *있을때,,
      컴파일러가 자식 클래스에 생성자를 호출할때
      super() 키워드를 자동으로 넣어준다.
    2. 부모클래스에 매개변수 인자가 없는 default 생성자가 *없을때,,
      컴파일러 오류가 발생한다.
    
  1. 메소드의 *재정의 (@Override)

    1. 메소드의 재정의 :
      부모클래스의 상속 메소드를 수정해서 자식클래스에 재정의 하는것.
2. 메소드의 재정의 조건
	1) 부모 클래스의 메소드와 동일한 시그니처를 가져야 한다.
    
    	2) 접근 제한을 더 강하게  override 할 수 없다.
        
        ex) 부모(public) -> 자식(private) 불가(X)
        	부모(private) -> 자식(public) 가능(O)
            
        3) 새로운 예외(Exception) throws는 불가능하다.
        but... >> throws RuntimeException은 가능하다.
        
 3. @Override 어노테이션
 	컴파일러에게 부모 클래스의 메소드 선언부와 동일한지 검사를 지시한다.
    
    	정확한 메소드 재정의를 위하여 @Override를 붙여주면 오히려 조아
        
 4. 메소드 재정의 효과 -- 	(다형성 -2 밑에서 정리)
 
 	재정의 된 자식 메소드가 실행된다.
    
    
5. 부모 메소드의 사용(super)
	1) 메소드 재정의는 부모 메소드를 숨기는 효과를 가진다.
    
    	2) 자식 클래스에서 부모객체를 호출할 땐
        	super.부모메소드명();
            
6. 부모 클래스의 메소드에 final이 붙는다면..
	재정의(Override)가 불가능하다.
    
   부모클래스 자체에 final이 붙는다면
   	더이상 상속이 불가능하다 ex) public final class Car(){}
    
    
  1. 다형성 (多形性, Polymorphism)

    1. 같은 타입이지만, 실행 결과가 다양하게 나오는 객체 대입(이용)이 가능한 성질

      부모 타입에는  모든 자식 객체가 대입 가능하다.
      	- 자식 타입은 부모 타입으로 자동 타입변환 (promotion(묵시적 형변환))
          
      ┌────────────────────────────┐
      ↓       자동 타입 변환       ↓
      부모클래스 변수 = 자식클래스 타입;
      
      ex) Animal animal = new Cat(); < 가능하다 -- 다형성 -1 밑에서 정리.
    2. 상속관계 없이는 다형성이 성립될 수 없다.

    3. 다형성 -1
      부모타입의 클래스에 자식클래스가 들어갈 수 있다.
      ex) Animal animal = new Dog();

    4. 다형성 -2 ==> Overriding
      자식클래스에 메소드가 Override(재정의)되면
      메소드가 호출 될 때 다른 형태로 나타난다.

    5. 다형성이 적용되는 지점
      1) 필드
      2) 메소드가 갖는 매개변수

    6. 객체 타입 확인(instanceof)

      부모 타입이면 모두 자식타입으로 강제형변환을 할수 있는것은 아니다.

      ClasCastException 예외가 발생할 수 있기에,,,

      ex) Parent parent = new Parent();
      Chile child = (Child)parent; // 강제 타입변환을 할 수 없다.

      즉, 먼저 자식타입인지 확인한 후에 강제 타입변환을 실행해야 한다.
      자식타입인지 확인하는 방법에는 instanceof가 있다.

      Form) boolean result = 좌항(객체) instance of 우항(타입)

      ex) public void method(Parent parent){
      if(parent instanceof Child)
      {
      Child child = (Child) parent;
      }

    다음시간에는 이어서 추상클래스에 대해
    알아보겠습니다.

profile
Hello world!

0개의 댓글