자바수업 기록

자바15강 다형성 - 클래스 캐스팅

JadeStone 2022. 10. 12. 17:39

JadeStone의 깃허브 링크:

https://github.com/BigJadeStone/java-class

<오늘의 실습 문제들>

encap_Q.zip
0.00MB
House.java
0.00MB
poly_Q.zip
0.00MB

<어제 복습 내용>

참고 폴더 : day07.encap.obj,Quiz11(실습)
-defaualt는 접근제한자를 붙이지 않은 형태.
-객체를 반복문 밖에서 생성해 줄 때는 변수값을 다르게 해줘야하지만.
 반복문 안에서 객체를 여러번 생성할 때 변수값을 그대로 해도 되는 이유는.
 첫째 한번 생성한 객체를 별다른 저장공간에 저장해주지 않으면 이는 사라진다.
 둘째 한번 생성한 객체를 배열처럼 저장공간에 각각 담아주면 각각 고유의 객체가 된다.
 위 2가지 이유 때문이다.
-자동완성 기능은 내가 손으로 직접 잘 쓸 수 있을 때부터 써야된다. 안그러면 실력인 안늠.
-public Hotel(Chef chef) {} // 클래스 타입을 받을거면 참조타입에 해당 클래스 이름을 쓰면된다.
-객체 안에 객체들이 있는 모양도 알아두자. 당장 이해하기 어렵지만 이해하면 잘 하는것.

 예를들어 부모클래스 안에 여러 자식 클래스를 넣어서 쓰는 것과 같은 것들 등등.
-null 은 초기값이 아니라. 아얘없다는 뜻. 그래서 초기값을 설정할 때는 null을 설정하면 안됨. 자바에서는. 
 다시말하지만 null은 텅 비어있다는 뜻.
-private KeyBoard key= new KeyBoard();
 여기서 우항에 new KeyBoard() 이걸 넣은 의미는 객체를 초기화 해주는것이라는 뜻.

public void setKeyBoard(KeyBoard key) {
this.key = key;
}
public KeyBoard getKeyBoard() {
return key;
}

com.getKeyBoard().info(); //getter 메서드는 클래스를 가져온것. 즉 클래스 참고라고 보고 . 찍고 클래스 안에 기능을 사용하면됨.

<오늘 수업>

자바교안 14강

다형성(Polymorphism)
참고 폴더: day08.poly.basic
- 다형성이란 "객체가 여러 형태를 가진다"라는 의미로 해석되며, 하나의 객체가 여러가지 유형으로
  사용되는 것을 의미합니다. -> 즉, 클래스의 형변환 이라고 생각하면 됨.
- ★ 다형성은 상속을 전제조건으로 합니다 ★
- 다형성을 위해 자바는 자식클래스가 부모클래스의 타입을 가질 수 있도록 허용합니다. 즉, 부모 타
  입에 모든 자식객체가 대입될 수 있습니다.
- 자식이 부모에 저장될 수 있다.
  그때 부모처럼 사용된다.
  단, 오버라이징 된 메서드는 먼저 실행된다.

다형성



클래스 Casting
참고 폴더: day08.poly.basic , day08.poly.basic2 , Quiz12(다형성 배운거 총집합 실습, 깃허브에 실습 파일 따로 올리기.)
강제 타입 변환(Type Casting)
- 강제 타입 변환은 부모 타입을 자식 타입으로 변환하는 것을 말합니다. (정확히는 부모가 자식으로 들어가는 것이 아니라 바로 아랫줄.)
- ★★★객체에서 타입 캐스팅을 사용하려면 우선 먼저 Promotion이 일어나야 합니다. 즉, 부모 타입으로 한번
형 변환이 된 자식 객체만 강제 타입 변환을 사용할 수 있습니다.★★★
- Promotion이 일어나면 자식 클래스가 가지고 있는 재정의되지 않은 메서드를 사용할 수 없다는 단점
이 있었습니다. 이 단점을 극복하기 위해 강제 타입 변환을 사용하여 자식 메서드를 호출하는 방법을 사
용합니다.

클래스 캐스팅



추가 메모내용.
-자식이 부모에 저장되는데, 부모님처럼 사용되지만 단, 자식의 오버라이딩된 메서드가 실행됩니다.
-Parent p = c; //동일한 문장 Parent p = new Child();
 헷갈리면 타입을 중요시한다고 했으니 p 변수 왼쪽에 타입에 맞는 기능이 사용된다고 보면됨. 
 (여기서는 child가 아닌 parent의 기능이 사용되는데. 오버라이딩 된 메서드만 child의 것이 사용됨.)
-자식이 부모타입으로 형변환 되었을 때, 자식이 갖고 있던 메서드(기능)은 사용 불가.
-위 페런트와 차일드 식에서 생각해 볼 점.
 System.out.println(p==c); //동일한 주소값을 나타냄. 다형성이란 잠깐 형변환을 해주는 것이다.

# 다운캐스팅
-다형성이 적용되면, 자식이 가지고 있던 본래의 기능을 사용할 수 없기 때문에, 클래스캐스팅을 사용합니다.
 즉, 자식이 부모로 캐스팅 되었던것을 다시 자식으로 되돌리는 것임(다형성이 적용된 객체만 캐스팅이 가능합니다).

 
 
<오늘 기억할 내용>

-alt + shift + s -> 오버라이딩도 자동으로 할 수 있음.
 (사진2 위치)

오버라이딩 자동완성기능 step1
오버라이딩 자동완성기능 step2