상속(inheritance)

  • 정의 - 나에게 없는 것을 부모에게 물려 받아 원래 내 것처럼 사용하는 것

[한 클래스가 다른 클래스의 특성과 동작을 그대로 물려받아 사용할 수 있는 기능을 말합니다]

넓은 정의 - 일반화

상속을 하는 이유

  • code의 중복을 피할수없거나. 내 능력으로는 만들지 못하는 기술이 있을 때

  • 누군가 만들어 놓은 코드를 부품처럼 쓴다는 개념

 단 . 공개적(pubilc)으로 상속해 주겠다는 것만 받을 수 있다. 
 inheritance(상속) 이 아닌 extends(확장)이라는 키워드를 사용

요약

  1. 부모 클래스를 상속하면 부모의 기능을 자식이 사용 할 수 있다.

상속의 특징

※ 자바는 다중상속을 허용하지 않는다 (파이썬은 가능)자바 클래스 분류의 개념으로 정의에서 어긋나 사용X
( 인간이 조류의 특성과 포유류의 특성을 동시에 상속 받을 수 없는 이유와 같다)

  1. Class를 상속 받으면 해당 method를 부모 calss 호출 없이 사용 가능하다.
  2. 나를 객체화시키면 부모를 객체화시키지 않아도 사용 할 수 있다.
  3. 상속을 받으면 부모의 기능을 내것처럼 쓸 수 있다.
  • 객체화로도 남의 기능을 쓸수는 있다.
  • 또한 UML에서는 상속(inherritance)을 일반화(generraliztion) 라고 표현한다.

객체화랑 상속의 차이점

  • 상속을 사용할때랑 사용하지 않을때 편리함과 불편함은?
  1. 객체화만 사용할 경우 각 클래스에 어떤한 매소드가 있는지 일일히 확인해야되며

  2. 상속을 사용할 경우에는 한 클래스씩 객체화 하지 않아도 한클래스에 몰아넣어서 사용 가능하다.

    public class Operator3 {
    
    public int multi(int a, int b) {
    
    return(a*b);
    
    Extends 사용하여 상속한다. 

[Operator 3에 Operator 4를 상속시킨다]

public class Operator3 ★extends★ Operator4 {
public int multi(int a, int b) {
return(a*b);

※오버로드 는 과적 하나 이름으로 여러 매개변수를 만들수 있게 한다
단. 매개변수, 타입이 달라야 한다

오버라이드

  • 정의 : 상속 받은 매서드를 다른 매서드를 바꿔 덮어쓰인다.
  • 전체 또는 일부분만 바꿀 수 있다.
  1. 전체를 다 바꾸는 방식

@Override
public int run() {
return 200;
}

  1. 일부분만 바꾸는 방식
    ※ super 는 부모를 의미 super class 는 부모클래스를 의미 = 상위 클래스

boolean turbo = false;
@Override
public int run() { // 상황에 따라서 부모 메서드를 일부 사용
if(turbo) {
return 200;
}else {
return super.run();

final이 붙은 매서드는 오버라이드를 할 수 없다

  • 오버라이드는 기존 메서드를 수정하는 작업이기 때문에 Fianl 같은 읽기 전용은 사용 할 수 없다.

[요약]
1. 자바에서는 상속은 하나의 클래스만 가능
2. 부모를 상속 받은 자식~
3. 상속받은 매서드를 내 맘대로 바꿔 쓸 수 있다. [오버라이드]
4. 단 읽기 전용인 final 키워드가 있는 매서드는 불가능 하다.

다형성(Polymorphim)

  • 같은 부모를 상속 받은 class는 같은 Type으로 들어 갈 수 있다.

다형성을 사용하지 않으면

  • 사용할 객체가 여러개라면 여러개의 객체를 담을 변수를 일일히 선언해 줘야 한다.

다형성이 왜 유용한가

  • 여러 객체가 필요할 때 부모 형태의 변수 하나 선언하여 사용할 수 있기에 ( 자원적으로 훨씬 유용하기때문)

    단. 고유 특성이 사라진다는 단점도 있다.

형 변환은 다형성에서도 적용 된다.

  • 묵시적 형 변환 - 자식 클래스가 부모 클래스로 들어가는 것을 말한다.
  • 묵시적 형 변환의 단점 - 부모의 형태로 들어가 산다는 것은 고유특성이 사라진다. 그렇게 고유특성을 발현할려면 다시 나가야 한다.
  • 명시적 형 변환 - 부모형태에서 자식 형태로 되돌아 올때 사용 해야된다.

Mammal mal;

// 다형성에 의해서 Dog 과 cat 은 부모 형태인 Mammal 안으로 들어 갈 수 있다.

mal = new Dog();

mal.birth(); // 오버라이드 된 매서드는 내가 변경했다 하더라도 부모것 이므로 사용가능

mal.eat(); // 원래 부모의 매서드는 사용 가능

// mal.bark(): // 하지만 내 고유의 매서드는 사용 못함

Dog dog = (Dog) mal;// 부모 형태에서 자식 형태로 되돌아 온다. 명시적 형 변화를 사용 해야 된다.

dog.back();


요약

  1. 다형성은 자식 객체가 부모 객체 형태의 변수에 들어갈 수 있는것이다.
  2. 다만 부모 형태의 변수에 들어가면 고유특성이 사라진다.
  3. 이 경우 casting 을 통해 자식 형태로 되돌아 가야 한다.

※ 변수에 쓰면 필드 다형성

※ 매개변수에 쓰면 매개변수 다형성

변수는 데이터를 저장하는 메모리 공간의 이름으로서 어디서든 선언될 수 있고, 해당 스코프 내에서 사용됩니다.

반면에 매개변수는 메서드나 생성자와 같은 메서드의 파라미터로 사용되며, 메서드 호출 시에 값을 전달받습니다.

매개변수는 메서드 내에서만 유효하며 메서드 실행 종료 시 소멸합니다.

다형성의 활용

  • 필드 다형성을 활용하면 객체 변경시에도 필드 타입에 변화를 주지 않아도 된다.
  • 부가 적인 장점 : 하나의 타입에 여러 객체를 관리 할 수있는 장점은 array 활용이 가능해진다.
  • 필드 다형성을 활용하면 객체화 된 속성만 바꿔서 형변환 하면 된다.

패턴화 = 공통점을 추출

질문지

  1. 상속의 뜻, 의미
    어떻게 사용 하는지 {

  2. 내것처럼 사용 한다는 게 어떤 의미를 갖는지.
    [나를 객체화시키면 부모를 객체화시키지 않아도 사용 할 수 있다는 것]

  3. extends라는 키워드란
    기능의 확장

  4. 자바는 다중 상속이 안된다 이유는?

  5. 상속받았을때 장점은?

  6. 상수를 못 받는 것들은

  • 부모클래스에서 private 를 갖는 맴버는 상속이 불가능하다.
  1. 오버라이드랑 오버로드의 차이점

  2. 오버라이드를 사용 할 수 없는 것 과 이유

  3. 다형성이란

  4. 다형성의 장점 (유용함)

00다형성

  1. 프로모션과 캐스팅이란?
  • 묵시적 형변환은 작은개념에서 큰개념 -> 프로모션
  • 명시적 형변환은 큰개념에서 작은개념 -> 캐스팅이라 한다.
  1. 프로모션(명시적 형변환)의 단점 때문에 형변환을 하는 이유
profile
[JAVA]

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN