์ฐธ์กฐ ๋ฐ์ดํฐํ
- ๋ฐฐ์ด, ํด๋์ค ๋ฑ์ ๋งํ๋ ๊ฒ์ผ๋ก ๋ค๋ฅธ ์ฐธ์กฐ ๋ฐ์ดํฐ ํ ๋น์ด๋ ๋ค๋ฅธ ํด๋์ค๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ ํ ๋ ์ฐธ์กฐ ๋ฐ์ดํฐ ํ ๋ณํ์ด ์ผ์ด๋๋ค.
- ๋ฌต์์ ์ธ ํ๋ณํ(์ ์บ์คํ /์๋ํ๋ณํ)
- ๋ช ์์ ์ธ ํ๋ณํ(๋ค์ด์บ์คํ /๊ฐ์ ํ๋ณํ)
- ํน์ ๊ฐ์ฒด๊ฐ ํ์ ํด๋์ค์ ํ์์ ์์ ํด๋์ค์ ํ์ผ๋ก ํ๋ณํ ๋๋ ๊ฒ
- ํ๋ง ์ ํํ๋ค๋ฉด ๋ฌต์์ ์ผ๋ก ํ๋ณํ๋๋ค.(์ ์บ์คํ )
-> ์ฆ ์ํผํด๋์ค๋ฅผ ์๋ธํด๋์ค๋ก ํ๋ณํ ์ํฌ ์์๋ ๋ฌต์์ ์ผ๋ก ํ๋ณํ(์ ์บ์คํ )๋๋ค๋ ๊ฒ
class Person{}
class Student extends Person{}
...
Person p = new Sudent(); //์ํผ ํด๋์ค ๊ฐ์ฒด = new ์๋ธํด๋์ค
Student s = new Person(); //์ค๋ฅ ๋ฐ์ -> ์๋ธํด๋์ค๋ ์ํผํด๋์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
- ์ ์บ์คํ ํ ๊ฒ์ ๋ค์ ์๋์ ํ์ผ๋ก ๋ณต๊ตฌ์์ผ ์ฃผ๋ ๊ฒ
- ์ ์บ์คํ ๋ ๊ฒ๋ง ๋ค์ด์บ์คํ ์ํฌ ์ ์๋ค.
- ๋ค์ด ์บ์คํ ์ ๊ฐ์ ์บ์คํ (๋ช ์์ )์ ์์น์ผ๋ก ํ๋ค.
class Student extends Person{};
...
Person p = new Student(); //์
์บ์คํ
ํ ํ
Student s = (Student)p; //๋ค์ด ์บ์คํ
๊ฐ๋ฅ
Bus , Truck, Tax ๋ฅผ ๋ชจ๋ Car์ ์์ ๋ฐ์ ์
Car mycar = new Car();
Bus mybus = new Bus();
Truck mytruck = new Truck();
Tax mytax = new Tax();
mycar = mybus //์ปดํ์ผ ๊ฐ๋ฅ (์
์บ์คํ
)
mybus = mycar //์ปดํ์ผ ์ค๋ฅ (์์ ๊ด๊ณ X)
mybus = mytruck //์ปดํ์ผ ์ค๋ฅ (์๋ธํด๋์ค๊ฐ ์ฐธ์กฐ ๋ฐ์ผ๋ฏ๋ก)
mybus = (Bus)mycar //์ปดํ์ผ ๊ฐ๋ฅ, ์คํ์ค๋ฅ -> ์
์บ์คํ
X
//mybus = (Bus)mycar๊ฐ ์คํ ๋ ๋ผ๋ฉด ์
์บ์คํ
์ ํด์ค์ผ ํ๋ค.
Car mycar = new Bus(); //์
์บ์คํ
Bus mybus = (Bus)mycar; //๋ค์ด ์บ์คํ
์์ ํด๋์ค ์ด๋ฆ์ผ๋ก ํ์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถ ํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฒ
- ์ ์บ์คํ ํ์ ๋ ์์ ํด๋์ค์ ์ด๋ฆ์ผ๋ก ํ์ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถ
- ์๋ ์์ ๊ด๊ณ์ ์์ ๋ ์์ ํด๋์ค์ ๊ฐ์ฒด ๋ณ์๋ ํ์ ํด๋์ค์ ๋ฉ์๋์ ์ ๊ทผํ ์ ์์ผ๋ ์ ์บ์คํ ์ ํ์ ๊ฒฝ์ฐ ํ์ ํด๋์ค ๋ฉ์๋๋ฅผ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋งํ๋ค.
์ฐธ๊ณ ์ฌํญ
instance of ์ฐ์ฐ์
- ๊ฐ์ฒด์ ํ์ ์ ๋น๊ตํ๋ ์ฐ์ฐ์๋ก ์ฐ๋ณ์ ๊ฐ์ฒด์ ์ข๋ณ์ ๊ฐ์ฒด ํ์ ๋น๊ตํ์ฌ ์๋ก ๊ฐ์ผ๋ฉด true๋ฐํ, ๊ทธ๋ ์ง ์์ผ๋ฉด false ๋ฐํ