26일 9/30

권준석·2022년 10월 1일
0

상속

  • 객체의 전역 변수와 메서드를 다른 객체에게 물려주는 기능
  • 클래스를 계층화 표현 할 수 있다
  • 슈퍼 클래스와 서브 클래스가 있다
  • 서브 클래스는 슈퍼 클래스의 자원(변수,메서드)을 사용 할 수 있다
  • 접근제어자 private는 상속 불가
  • 패키지가 다른경우 접근제어자 default는 상속 불가

상속을 이해 하기위한 키워드

  • 슈퍼 클래스, 서브 글래스
  • 서브 클래스는 슈퍼클래스의 기능을 확장 (비슷한 의미 : 서브 클래스는 슈퍼 클래스의 자원을 사용 가능하다)
  • 클래스의 계층화(주된 목적은 아니다)

부모와 자식의 관계를 클래스로 표현한다
부모는 하나
자식은 남자와 여자로 세분화 : 클래스를 따로 만들어야한다
자식은 여러개로 나뉠수 있다 : 같은 클래스 다른 대입 값

사용 문법 : 클레스에 extends을 선언
class (자식)클래스명 extends (부모)클래스명 { }

extends 기준으로 왼쪽이 서브 클래스 명 오른쪽이 슈퍼 클래스 명
서브 클래스는 슈퍼 클래스의 자원을 사용 가능하다

상속으로 클래스를 계층화 시킬수있다(실제 많이 사용하는이유)

서브 클래스는 개인적인 자원을 가질수있다

계층화 시키는 팁

  1. 프로그램에서 표현하고자 하는 클래스를 먼저 생각
    클래스를 구성하는 기준을 구체적이며 실제 표현 가능한 것으로 판별(저장 :전역변수(맴버변수), 기능 : 메서드)

** 실제 사용할때
내가 계층화 할것인가(직접만들기 "make")? 새로운 계층을 설계할것인가(제공되는것 사용 "use") ? 관점
계층화된 어떤 기능을 사용할것인가 ? 관점

추상 클래스, 추상 메서드

  • 추상 메서드 : 선언만 한 메서드, 구현 하지 않았다, 상속받은 서브클래스가 메서드 오버라이딩해야한다<필수>
  • 추상 클래스 : 추상 메서드가 1개 이상이면 추상 클래스로 선언
    추상클래스는 객체로 만들수 없다 (메서드가 정확하게 기능이 구현되지 않은 상태, 객체가 되면 안된다)

Tip

  • 공통된 전역변수와 메서드로 슈퍼 클래스의 메서드를 정의하고 구현했는대
    서브클래스가 공통으로 메서드의 기능이 필요하지만 실제 동작 방법이 다를수있다
    이때는 슈퍼클래스가 구현하지 않고 서브 클래스가 구현 하는것이 더 적당하다
  • 기능을 이해하려면 뭘 이해 해야하나?? 메서드명

Tip2

  • 메서드명의 통일은 중요하다
  • 서로 다른 클래스의 정의된 이름이 다르면 서로 다른 기능의 정의된 이름을 알아야하니 휴먼 에러가 날수있다
    그래서 메서드명을 통일 시켜야한다

메서드 오버라이드 (override)

  • 메서드를 재정의하는것

슈퍼(부모) 클래스 의 추상 메서드을 서브(자식) 클래스에서 재정의(재구현) 해야한다 <필수>

정리
상속받은 서브 클래스가 슈퍼클래스의 메서드를 재구현(재정의)하는것이 메서드 오버라이징
상속받는 추상 메서드는 반드시 재구현해야 하고 일반 메서드는 선택이다

정리
슈퍼 클래스는 추상 메서드를 정의 할수있고
이를 상속받은 서브 클래스는 추상메서드응 반드시 재정의 해야한다
슈퍼클래스의 추상 메서드가 아닌것도 재정의가 가능하지만 필수는 아니다

  • this - 자신 객체의 주소
  • super - 슈퍼클래스의 객체 주소

추상 선언 문법

접근제어자 abstract 자료형

다형성 - 객체 지향 언어의 특징

  • 슈퍼클래스를 참조하는 참조변수가 슈퍼 클래스를 상속하는
    서브 클래스의 객체 생성해 그 객체를 대입하는 것
  • 하나의 참조 변수로 서로 다른 객체의 데이터을 값으로 가질 수 있다
  • 상속으로 계층화된 구조에서 다형성을 응용하면 코드가 단순화되고 유연해진다

instanceof 연산

자료형을 비교하는 연산자
형변환 가능 여부를 확인하며 boolean타입이다
주로 상속관계에서 부모객체인지 자식객체인지 확인 할때 많이 사용된다

profile
ㅇㅇ

0개의 댓글