๐ด ๋คํ์ฑ
๋คํ์ฑ์ด๋ ํ๋์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ์ ํ์ ์ ๊ฐ์ง ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐ ์๋ฅผ ๋ค์ด
โพ Animal ํด๋์ค
abstract public class Animal { String kind; void breath() { System.out.printf("%s๋ ์จ์ ์ฝ๋๋ค.\n",kind); } abstract void sound();
๐ Animal์ ์ถ์ํด๋์ค๋ก ์ง์ ํ๋ค.
โพ Cat ํด๋์ค / Dog ํด๋์ค
//Cat class Cat extends Animal{ //๊ธฐ๋ณธ์์ฑ์ Cat(){super.kind = "๊ณ ์์ด";} //์ค๋ฒ๋ผ์ด๋ฉ @Override void sound() { System.out.println("์ผ์น"); } //Cat๋ง์ ๋ฉ์๋ void eyeColor() { System.out.println("~eyeColor๊ฐ ๋ฉ์ง๋ค."); } }
class Dog extends Animal{ //๊ธฐ๋ณธ์์ฑ์ Dog(){ super.kind = "๊ฐ์์ง"; System.out.println("Dog ๊ธฐ๋ณธ์์ฑ์"); } //์ค๋ฒ๋ผ์ด๋ฉ @Override void sound() { System.out.println("๋ฉ๋ฉ"); } //Dog ๋ง์ ๋ฉ์๋ void speed() { System.out.println("๊ฐ์์ง๋ ์ ๋ฌ๋ฆฐ๋ค."); } }
Animal์ ์์ ๋ฐ๋ Cat๊ณผ Dog๊ฐ ์๋ค.
์ด๋ ๋คํ์ฑ์ ํ์ฉํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํด๋ณธ๋ค.
โพ ์ผ๋ฐ ์ธ์คํด์คํ
Cat cat = new Cat(); Dog dog = new Dog();
โพ ๋คํ์ฑ์ ํ์ฉํ ์ธ์คํด์คํ
Animal cat = new Cat(); Animal dog = new Dog();
๐ Animal ๊ฐ์ฒดํ์ ์ผ๋ก ํต์ผํ์ฌ ํ๋์ ๊ฐ์ฒด๋ก ์ฌ๋ฌ ํ์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑ
๐ท ๋คํ์ฑ์ ํ์ฉํ ๊ฐ์ฒด์ ๋ฉ์๋ ์ถ๋ ฅ
โพ ๋ฉ์๋ ์ถ๋ ฅ
Animal cat = new Cat(); Animal dog = new Dog(); //Animal ์ ๋ฉ์๋ ํธ์ถ ๊ฐ๋ฅ cat.breath(); cat.sound(); dog.breath(); dog.sound(); //Animal์ ์๊ณ ์์ ํด๋์ค๋ง ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ ๋ถ๊ฐ๋ฅ cat.eyeColor(); dog.speed();
๐ค ์์ ํด๋์ค์๋ง ์๋ ๋ฉ์๋๋ง ํธ์ถํ ์ ์๋๋ฐ ์ ์ฌ์ฉํ ๊น?
๐ท ๋คํ์ฑ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
1๏ธโฃ ํ์ ๊ฐ์ ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
โพ Dog ํ์ ์ Cat ํ์ ์ผ๋ก ๋ณํ
Animal animal = new Dog(); animal.sound(); //Cat์ผ๋ก ํ์ ๋ณํ animal = new Cat(); animal.sound();
๐ ๋์ผํ ๊ฐ์ฒด์์ ํ์ ๋ง ๋ณํ ๋ ์ ์๋ค.
ํ์ ๊ฐ์ ๋ณํ์ด ์์ ๋กญ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์์ฑ๊ณผ ์ ์ฐ์ฑ ์ฆ๊ฐ
โพ ๋ค์ด ์บ์คํ ๊ฐ๋ฅ
Dog๋ง์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ Cat ๊ฐ์ฒด๋ก ์บ์คํ ํ๋๊ฒ๋ ๊ฐ๋ฅํ๋ค.Animal animal = new Cat(); Dog d = (Dog)animal; //Animal์์ Dog๋ก ๋ค์ด ์บ์คํ d.sound();
๐ ๋ฐ๋ก Dog ๊ฐ์ฒด๋ฅผ new ํด์ฃผ์ง ์์๋ ์บ์คํ ์ผ๋ก ๋ณํํด์ค๋ค.
2๏ธโฃ ๊ฐ์ฒด๊ฐ ๋ฉ์๋ ์ธ์๋ก ๋ค์ด๊ฐ ๊ฒฝ์ฐ
โพ ์ฌ์ฉ์ํ ๊ฒฝ์ฐ ๋ฉ์๋
๐ Cat๊ณผ Dog์ ๊ฐ๊ฐ์ ํ์ ๋ณ๋ก ์ค๋ฒ๋ก๋ฉํด์ ๋ง๋ ๋ค . ๋ฐ๋ผ์ ํ์ ๊ฐฏ์๋ณ๋ก ๋ฉ์๋๊ฐ ๋์ด๋๋ค.//Cat ๋ฉ์๋๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ public static void animalUse(Cat cat) { cat.breath(); cat.sound(); } //Dog ๋ฉ์๋๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ public static void animalUse(Dog dog) { dog.breath(); dog.sound(); }โ
โพ ๋คํ์ฑ ์ฌ์ฉ
public static void animalUse(Animal animal) { animal.breath(); animal.sound(); }โ
๐ Animal ๋ฅผ ์ฐธ์กฐํ ๊ฒฝ์ฐ Animal๋ก ํต์ผํ์ฌ ๊ฐ๊ฐ์ ํ์ ๋ณ๋ก ์ค๋ฒ๋ผ์ด๋ฉ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๊ฒ๋๋ค.
๐ ๊ฒฐ๋ก
๋คํ์ฑ์ ํตํด ์๋ง์ ํ์ ๋ค์ ํ๋์ ๊ณตํต๋ ๊ฐ์ฒด๋ก ๋ฌถ์์ผ๋ก์จ ์ฝ๋๋ฅผ ์ค์ฌ์ฃผ๊ณ ์ ์ง๋ณด์์ฑ์ด ์ฆ๊ฐํ์ฌ ๋ใ ์ฑ ํจ์จ์ ์ธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.