[Java] λ€νμ±μ΄ 무μμ΄κ³ μ μ¬μ©ν κΉ?
π΄ λ€νμ±
λ€νμ±μ΄λ νλμ κ°μ²΄κ° μ¬λ¬κ°μ νμ μ κ°μ§ μ μλ κ²μ μλ―Ένλ€.
π μλ₯Ό λ€μ΄
βΎ 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λ‘ ν΅μΌνμ¬ κ°κ°μ νμ λ³λ‘ μ€λ²λΌμ΄λ©λ λ©μλλ₯Ό νΈμΆν μ μκ²λλ€.
π κ²°λ‘
λ€νμ±μ ν΅ν΄ μλ§μ νμ λ€μ νλμ 곡ν΅λ κ°μ²΄λ‘ λ¬ΆμμΌλ‘μ¨ μ½λλ₯Ό μ€μ¬μ£Όκ³ μ μ§λ³΄μμ±μ΄ μ¦κ°νμ¬ λγ μ± ν¨μ¨μ μΈ κ°λ°μ΄ κ°λ₯νλ€.