열심히 끝까지
25강 상속과 다형성 - 다형성 개념과 다형성 관련 실습 본문
25-1 ) 다형성과 다형성실습
<클래스와 객체 복습>
클래스 : 객체를 만들기 위한 설계도
객체 : 독립적으로 존재할 수 있는 것
인스턴스 : 클래스로 실제 메모리에 생성된 객체(객체가 더 포괄적인 의미)
<상속 복습>
상속 : 부모 클래스의 필드를 자식클래스가 받아오는 것
상속방법 :
class 클래스명 extends 부모클래스명{
....
}
접근제어자 중
public : 어떤 패키지에 있던 간에 모두 접근 가능한 접근제어자
private : 자식이 상속받을 수 없는 필드
default : 같은 패키지 내에서만 접근 가능한 접근제어자
protected : 다른 패키지에서 자식 클래스만 접근 가능한 접근제어자
<오버라이딩 복습>
오버라이딩 : 부모클래스로부터 받아온 메서드를 자식에 맞게끔 재정의 하는 것
(1) 다형성 개념
다형성 ?
한 가지 타입이 여러 가지 형태의 인스턴스를 가질 수 있는 것
다형성의 여러 방법 : 부모 자식간의 casting(형 변환)
1. 업 캐스팅(upcasting)
2. 다운 캐스팅(downcasting)
1) 업캐스팅
: 자식 클래스의 객체가 부뫀클래스의 참조변수로 형 변환되는 것
<구조>
부모클래스 변수 = 자식 객체값;
<실습> Upcasting1
[ 매개변수 생성 꿀팁 ]
우클릭 -> Source -> Generate Constructor using Fields
업 캐스팅 시, Student 클래스의 info()가 호출되는 이유?
--> 동적 바인딩 때문!
2) 동적 바인딩
: 컴파일 시점에선 부모클래스의 필드로 인지하나,
런 타임 시점에선 자식 클래스의 필드로 호출할 메서드를 묶는 것
Human h1 = new Student("나길동", 17, "롤하기", 1);
h1.info();
-> 컴파일 시점 바인딩
<Human 클래스의 info()>
void info(){
System.out.println("name : " + name);
System.out.println("age : " + age);
System.out.println("hobby : " + hobby);
}
-> 런타임 시점 바인딩
<Student 클래스의 info()>
void info(){
super.info();
System.out.println("grade : " + grade);
}
==> study는 Human 클래스에서 만들지 않았기 때문에 공간 자체가 없음
info라는 메소드를 저장하는 공간에 자식 공간에 info가 묶인다 라고 보면 됨
상속 받은 자식 클래스가 오버라이딩한 메서드를 호출할 때는
동적 바인딩이 적용
<실습> Polymorphism1
3) 다운 캐스팅
: 업 캐스팅 된 부모 클래스의 객체가
자식클래스의 참조 변수로 형 변환 되는 것
<구조>
자식 클래스 변수 = (자식 클래스) 업 캐스팅 된 부모 참조 변수;
- 다운 캐스팅 시 주의할 점
1. 업 캐스팅 된 변수만 가능
2. 명시적 형 변환
(2) 다형성 실습 Polymorphism4
'멘토씨리즈 JAVA' 카테고리의 다른 글
27강 추상클래스/인터페이스/내부클래스 - 인터페이스 (0) | 2022.05.02 |
---|---|
26강 추상클래스/인터페이스/내부클래스 - 추상 메서드와 추상클래스 (0) | 2022.04.30 |
24강 상속과 다형성 - 상속 / 메서드 오버라이딩 (0) | 2022.04.29 |
23강 클래스에 대하여 - 생성자 (0) | 2022.04.29 |
22강 클래스에 대하여 - 객체타입배열 / 연습 계산기 클래스 (0) | 2022.04.29 |