CS 곡λΆ
λ€νμ±(Polymorphism)μ΄λ?
μμ§
2021. 10. 28. 21:03
OOP(κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°)μ 4κ°μ§ νΉμ§ μ€ νλ
- μΆμν, μΊ‘μν, μΌλ°ν κ΄κ³, λ€νμ±
λ€νμ±(Polymorphism)
- μλ‘ λ€λ₯Έ ν΄λμ€μ κ°μ²΄κ° κ°μ λ©μμ§λ₯Ό λ°μμ λ κ°μμ λ°©μμΌλ‘ λμνλ λ₯λ ₯
- μ€λ²λΌμ΄λ©(Overriding), μ€λ²λ‘λ©(Overloading)
- μ½λλ₯Ό κ°κ²°νκ² ν λΏ μλλΌ λ³νμλ μ μ°νκ² λμ²ν μ μλ€.
- ꡬ체μ μΌλ‘ νμ¬ μ΄λ€ ν΄λμ€ κ°μ²΄κ° μ°Έμ‘°λλμ§μ 무κ΄νκ² νλ‘κ·Έλλ°μ ν μ μλ€.
1. λ€νμ±μ μ¬μ©νμ§ μλ κ²½μ°
public class Cat {
public void meow(){ System.out.println("μΌμΉ"); }
}
public class Dog {
public void bark(){ System.out.println("λ©λ©"); }
}
public class Parrot {
public void sing(){ System.out.println("μλ
"); }
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
Parrot parrot = new Parrot();
// μ μλλ¬Ό μΈ λ§λ¦¬μ μΈμμ리 νΈμΆ
cat.meow(); dog.bark(); parrot.sing();
}
}
2. λ€νμ±μ μ¬μ©ν κ²½μ°
// λΆλͺ¨ ν΄λμ€
public abstract class Pet {
public abstract void talk();
}
// μμ ν΄λμ€
public class Cat extends Pet {
public void talk(){ System.out.println("μΌμΉ"); }
}
public class Dog extends Pet {
public void talk(){ System.out.println("λ©λ©"); }
}
public class Parrot extends Pet {
public void talk(){ System.out.println("μλ
"); }
}
public class Main {
public static void main(String[] args) {
Pet[] pets = { new Cat(), new Dog(), new Parrot() };
// μ μλλ¬Ό μΈ λ§λ¦¬μ μΈμμ리 νΈμΆ
for (int i = 0; i < 3; i++){
// μ€μ μ°Έμ‘°νλ κ°μ²΄μ λ°λΌ talk λ©μλκ° μ€νλλ€.
pets.talk();
}
}
}
Overloading vs Overriding
- 곡ν΅μ : κ°μ μ΄λ¦μ λ€λ₯Έ ν¨μλ₯Ό νΈμΆνλ€.
μ€λ²λ‘λ©(Overloading)
- κ°μ μ΄λ¦μ ν¨μ(λ©μλ)λ₯Ό μ¬λ¬κ° μ μνλ€.
- 맀κ°λ³μμ μ νκ³Ό κ°μλ₯Ό λ€λ₯΄κ² νμ¬ λ€μν μ νμ νΈμΆμ μλ΅νλ€.
class OverloadingTest{
//μ΄λ¦μ΄ catμΈ λ©μλ
void cat(){
System.out.println("맀κ°λ³μ μμ");
}
//맀κ°λ³μ intνμ΄ 2κ°μΈ cat λ©μλ
void cat(int a, int b){
System.out.println("맀κ°λ³μ :"+a+", "+b);
}
//맀κ°λ³μ Stringνμ΄ ν κ°μΈ cat λ©μλ
void cat(String c){
System.out.println("맀κ°λ³μ : "+ c);
}
}
public class OverTest {
public static void main(String[] args) {
//OverloadingTest κ°μ²΄ μμ±
OverloadingTest ot = new OverloadingTest();
//맀κ°λ³μκ° μλ cat() νΈμΆ
ot.cat();
//맀κ°λ³μκ° intν λκ°μΈ cat() νΈμΆ
ot.cat(20, 80);
//맀κ°λ³μκ° String νκ°μΈ cat() νΈμΆ
ot.cat("μ€λ²λ‘λ© μμ μ
λλ€.");
}
}
μ€λ²λΌμ΄λ©(Overriding)
- μμ ν΄λμ€κ° κ°μ§κ³ μλ λ©μλλ νμ ν΄λμ€λ‘ μμλμ΄ νμ ν΄λμ€μ μ¬μ©νλ€.
- νμ ν΄λμ€μμ λ©μλλ₯Ό μ¬μ μν΄μλ μ¬μ©ν μ μλ€.
- λ©μλμ μ΄λ¦μ΄ μλ‘ κ°κ³ , 맀κ°λ³μκ° κ°κ³ , λ°ννμ΄ κ°μ κ²½μ°, λΆλͺ¨ν΄λμ€μ λ©μλλ 무μνκ³ μμ ν΄λμ€μ λ©μλ κΈ°λ₯μ μ¬μ©νλ€.
class Woman{ //λΆλͺ¨ν΄λμ€
public String name;
public int age;
//info λ©μλ
public void info(){
System.out.println("μ¬μ"+name+"λμ "+age+"μ΄μ
λλ€.");
}
}
//Womanν΄λμ€(λΆλͺ¨ν΄λμ€)λ₯Ό μμλ°μ :
class Job extends Woman{
String job;
//λΆλͺ¨(Woman)ν΄λμ€μ μλ info()λ©μλλ₯Ό μ¬μ μ
public void info() {
super.info();
System.out.println("μ¬μμ μ§μ
μ "+job+"μ
λλ€.");
}
}
public class OverTest {
public static void main(String[] args) {
//Job κ°μ²΄ μμ±
Job job = new Job();
//λ³μ μ€μ
job.name = "μ 리";
job.age = 30;
job.job = "νλ‘κ·Έλλ¨Έ";
//νΈμΆ
job.info();
}
}
μΆμ²: https://private.tistory.com/25 [곡λΆν΄μ λ¨ μ£Όμ]
https://gmlwjd9405.github.io/2018/07/05/oop-features.html
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Java