JAVA 상속

강정우·2022년 7월 18일
0

JAVA

목록 보기
19/31
post-thumbnail

상속

  1. 자바는 다중(동시)상속을 지원하지 않는다. 단, 기차처럼 1개에 1개씩을 상속이 가능함.
  2. 모든 클래스의 최상위 클래스는 Object클래스이다. 즉, 모든 클래스는 Object클래스로부터 상속받는다.
  3. 상속을 받는 순간 부모의 모든 method와 field를 사용할 수 있으며 sub class(자식 클래스)에서 새로 재정의(overloading)하거나 새로운 method를 추가한다면 자식클래스에서 정의한 method나 field값이 나옴.
  4. 만약 모든 sub class에서 부모클래스(super class)의 method를 사용하지 않는다면 구현부가 필요가 없어진다. 그것이 바로 추상화를 할 수 있다는 것 이다.
  • 교재 260page 참조

1. 추상화

  • 추상 클래스의 특징
    1.추상 메소드를 1개 이상 가지고 있다면 반드시 추상 클래스가 되어야한다.
    2.추상 클래스는 객체를 생성할 수 없다.
    3.추상 클래스를 상속받는 순간 반드시 추상 클래스 안에 있는 method를 재구현(재정의) 즉, 오버라이딩 하거나, 자식 클래스또한 추상 클래스가 되어야 한다.

  • 상속과 다른점은 추상화를 했기 때문에 그것을 그대로 따라서 만들어 구현(implement)해야지만 오류가 안 뜬다.

  • 이때 getter setter method 처럼 손 쉽게 override나 implement를 할 수 있다. (alt+ shift+ s)

  • 교재 290page 참조

2. up casting

  • 자식 class를 부모 type으로 변환.
animalclass 오리 = new Duckclass();
animalclass 개 = new Dogclass();
animalclass 고양이 = new Catclass();
animalclass 소 = new Cowclass();

그럼 왜 변환시킴?

  • 아래와 같이 하나의 객체로 묶어서 편하게 관리할 수 있기 때문이다.
ArrayList<superclass> animalList = new ArrayList<superclass>();

animalList.add(c1);
animalList.add(c2);
animalList.add(c3);
animalList.add(c4);
  • 추상화의 부모 class를 물려받아 구현한 subclass들을 superclass에 있는 동일한 method를 찍어보면 각자의 subclass에 해당하는 method가 출력된다.
for(int i =0; i<list.size();i++) {
	// 각 객체마다 소리를 내는 method를 호출
	list.get(i).makeSound();
}

#result
## 꽥꽥
## 멍멍
## 야옹
## 무우~
  • 단, method는 부모가 가지고 있는 mothod만 사용가능하다.
소.우유짜기()

# result
## error 발생

  • 따라서 자식 객체만의 method와 성질을 살리고 싶다면 다시 down casting을 진행하면 된다.

3. down casting

// 아래 코드로 인하여
animalclass 젖소 = (Cowclass)소;

// 아래 method를 활용하기 위해
젖소.우유짜기()

down casting 왜씀?

  • down casting을 쓰는 이유는 앞서 언급했듯 upcasting이 되어 쓰지 못하는 subclass만의 강점을 살리기 위해 upcasting이 되어있던 객체를 다시 downcasting하여 쓸 수 있다.

  • 따라서 down casting은 반드시 upcasting이 선행되어야 쓸 수 있다는 것을 할 수 있다.

  • 교재(271page)

추가공부

1. error

  • cannot be resolved type : 외부에서 import를 해서 가져왔을때 에러가 뜨는 경우가 있는데, 프로젝트의 jdk버전과 import한 시스템의 jdk버젼이 달라서 에러가 뜨는 경우가 많다.
  • 해결법은 buildpath에서 remove 후 다시 본인의 jdk 버전으로 import 해오면 된다.

2. eclips 꿀팁

  • ctrl + n 을 이용하여 class 생성을 조금 더 빨리 할 수 있다.

3. interface와 abstract의 차이점

  • 아니 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있지만 인터페이스는 오로지 추상 메소드와 상수만을 포함할 수 있는데 그럼 avstract class쓰지 interface 왜 씀?

쓰는 이유.

  • 자바는 클래스를 통한 다중 상속은 지원하지 않지만 클래스와 인터페이스를 통한 다중 상속은 지원하기 때문이다.
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글