상속

신예환·2022년 10월 1일
0

자바

목록 보기
2/12
post-thumbnail

상위타입의 리모콘으로 하위타입객체 고유의 메서드를 호출하지 못하는 이유

class 사람{
}

// 클래스로 할 수 있는 것 3가지

  • 객체 생성 // new 사람();
  • 리모콘 생성 // new 사람();
  • 리모콘 변수 생성 // 사람 a사람;

class 사람{
void 말하다(){
}
void 생각하다(){
}
}
//메소드로 할 수 있는 2가지

  • 객체를 만들때
    • 실제로 활용할 수 있는 기능
  • 리모콘을 만들때
    • 버튼으로 화 한다.

class 백인 extends 사람{
void 눈속에_숨다(){}
}

  • 사람 리모콘 버튼 개수 : 2개(말하다, 생각하다)
  • 백인 리모콘 버튼 개수 : 3개(말하다, 생각하다, 숨다)

//
double d=5; // 5 => 5.0

//형변환
//백인 리모콘이 사람 리모콘으로 형변환 돼서 들어간다.
사람 a사람 = new 백인();
a사람.숨다(); // 안되는 이유? 그냥 단순히 버튼이 뽑혀서 없다.
((백인)a사람).숨다(); // 된다. => 리모콘에 버튼을 추가한다.

// 백인 리모콘 => 사람 리모콘
// 버튼 3개짜리 => 버튼 2개짜리

정리

  • 클래스는 다른 클래스로 부터 변수와, 메서드를 복사 받을 수 있다.
  • 복사해 주는 클래스를 부모클래스, 복사 받은 클래스는 자식클래스 이다.
  • 위 행위를 상속이라고 한다.
  • 상속은 두 클래스가 A is B 관계임을 자바에게 알려준다.
  • 클래스로 할 수 있는 3가지, 변수생성 : 사람 a사람;
  • 클래스로 할 수 있는 3가지, 객체생성 : new 사람();
  • 클래스로 할 수 있는 3가지, 리모콘생성 : new 사람();
  • 메서드가 쓰이는 상황 2가지
    • 객체에서는 기능
    • 리모콘에서는 버튼
  • 사람 a사람;
    • a사람 이라는 변수에는 오직! 사람 리모콘만 들어 올 수 있다.
    • a사람 이라는 변수는 오직! 사람 객체와 연결될 수 있다.
  • 상속으로는 단순한 중복을 해결할 수 있지만, 복잡한 중복은 해결 할 수 없다 => 구성을 배워야한다.
  • 다중상속은 불가능하다.
  • 소프트웨어의 객체지향 기법, 좋은 설계기법, 디자인패턴 등은 오직 중복소스코드를 합리적으로 없애기 위해서 존재한다.
  • 중복이 안좋은 이유?
    • 나중에 변경사항이 생길 때, 바꿔야 하는게 많아진다.
    • 중복이 많은 코드는, 쉬운코드 => 실수
    • 중복이 많다. => 객체지향 기법 도입

상속을 통한 캐스팅 허용

  • 객체가 변수에 들어가지 못하는 이유

    • 변수에는 값이 하나 밖에 못들어가는데 객체는 여러변수의 집합이기 때문에
  • a무기 변수에 무기가 들어간다는 것이 아니라 a무기와 연결되어 있는것이 무기이다.

  • 다른말로 하면 a무기는 무기랑만 연결될 수 있다.
    무기 a무기 = new 칼();
    a무기 = new 활();
    class 무기{}
    class 칼 extends 무기{}
    class 활 extends 무기{}

메소드 오버라이딩

개념 파악을 하고 있어야한다. 부모와 자식의 메소드가 겹치면 자식 메소드로 실행한다(비활성화 시킨다, 덮어쓴다).

복잡한 상속의 폐해

-> 상속은 다중상속이 불가능하다. 하나만 상속 받을 수 있다.

profile
더디가도 함께가자

0개의 댓글