λ€νμ±(Polymorphism)μ μ΄λ¦ κ·Έλλ‘ λ€μν νν, μ¬λ¬ ννλ₯Ό λ»νλ€.
νλ‘κ·Έλλ°μμ λ€νμ±μ ν κ°μ²΄κ° μ¬λ¬ νμ
μ κ°μ²΄λ‘ μ·¨κΈλ μ μλ λ₯λ ₯μ λ»νλ€.
//λΆλͺ¨ ν΄λμ€
public class Parent {
public void parentMethod() {
System.out.println("Parent.parentMethod"); }}
//μμ ν΄λμ€
public class Child extends Parent {
public void childMethod(){
System.out.println("Child.childMethod"); }}
//λΆλͺ¨νμ
λ³μκ° μμ νμ
μ μ°Έμ‘°
public class PolyMain {
public static void main(String[] args) {
//λΆλͺ¨ λ³μκ° μμ μΈμ€ν΄μ€ μ°Έμ‘°(λ€νμ μ°Έμ‘°)
Parent poly = new Child();
poly.parentMethod();
//Child child1 = new Parent();
//μ»΄νμΌμ€λ₯ : μμμ λΆλͺ¨λ₯Ό λ΄μ μ μλ€.
//poly.childMethod();
//μμμ κΈ°λ₯μ νΈμΆν μ μλ€. μ»΄νμΌ μ€λ₯
}}
Parent νμ
μ λ³μλ λ€μκ³Ό κ°μ΄ μμ μΈ Parent λΏλ§μλλΌ,
μμ νμ
κ°μ²΄κΉμ§ μ°Έμ‘°ν μ μλ€.
- Parent poly = new Parent();
- Parent poly = new Child();
- Parent poly = new Grandson(); // Child νμμ μμκ° μλ€λ©΄ μ΄λν κ°λ₯
λ°λλ‘ μμμ λΆλͺ¨λ₯Ό λ΄μ μ μλ€.
μλ°μμ λΆλͺ¨ νμ
μ μμ μ λ¬Όλ‘ μ΄κ³ , μμ μ κΈ°μ€μΌλ‘ λͺ¨λ μμ νμ
μ
μ°Έμ‘°ν μ μμΌλ©° μ΄λ₯Ό λ€νμ μ°Έμ‘°λΌκ³ νλ€.
μμ νκ³μ μ ν΄κ²°νκΈ° μν΄μ νΈμΆνλ νμ μ μμμΈ Child νμ μΌλ‘ κ°μ λ‘ λ³κ²½νλ©΄ λλ€.
public class CastingMain1 {
public static void main(String[] args) {
//λΆλͺ¨ λ³μκ° μμ μΈμ€ν΄μ€ μ°Έμ‘°(λ€νμ μ°Έμ‘°)
Parent parent = new Child();
//λ¨ μμμ κΈ°λ₯μ νΈμΆν μ μλ€. μ»΄νμΌ μ€λ₯ λ°μ
//parent.childMethod();
//λ€μ΄μΊμ€ν
(λΆλͺ¨νμ
-> μμνμ
)
Child child = (Child) parent;
child.childMethod(); //μ¬μ© κ°λ₯
}
}
Parent parent = new Child();
//Parent νμ
μ κ°μ§ Child κ°μ²΄ μμ±
Child child = (Child) ;
//λ€μ΄μΊμ€ν
μ ν΅ν΄ λΆλͺ¨νμ
μ μμνμ
μΌλ‘ λ³νν΄μ λμ
Child child = (Child) X001;
//μ°Έμ‘°κ°μ μ½μ λ€μ μμ νμ
μΌλ‘ μ§μ
Child child = X001; //μ΅μ’
κ²°κ³Ό
Parent parentμ νμ
μ΄ λ³νμ§λ μλλ€.λν μΌν νλ¦
- new Child() β ν μμ X001 λ²μ§μ Child κ°μ²΄ μμ±
- Parent parent = X001; β Parent νμ μΌλ‘ μ°Έμ‘° (Parent νμ )
- Child child = (Child) parent; β X001 κ·Έλλ‘ λ³΅μ¬, μ΄λ₯Ό Child νμ μΌλ‘ νλ³ν
- κ²°κ΅ β Parent, Child λ λ€ X001 μ£Όμ λ€κ³ μμ
public class CastingMain3 {
public static void main(String[] args) {
Child child = new Child();
Parent parent1 = (Parent) child; //μ
μΊμ€ν
Parent parent2 = child; //μ
μΊμ€ν
μ μλ΅κ°λ₯, μλ΅κΆμ₯
parent1.parentMethod();
parent2.parentMethod();
//λ λ€ μ€νκ°λ₯
}}
| μν© | μ€λͺ | μΊμ€ν νμ μ¬λΆ |
|---|---|---|
| μ μΊμ€ν (μμ β λΆλͺ¨) | μμ νμ -> ν° νμ | μλ νλ³ν, μΊμ€ν μλ΅ κ°λ₯ |
| λ€μ΄μΊμ€ν (λΆλͺ¨ β μμ) | ν° νμ -> μμ νμ | λͺ μμ μΊμ€ν λ°λμ νμ |
public class CastingMain4 {
public static void main(String[] args) {
//1λ²μ½λ
Parent parent1 = new Child();
Child child1 = (Child) parent1;
child1.childMethod(); //λ¬Έμ μμ
//2λ²μ½λ
Parent parent2 = new Parent();
Child child2 = (Child) parent2; //λ°νμ μ€λ₯ - ClassCastException
child2.childMethod(); //μ€ν λΆκ°
}
}
Parent parent2 = new Parent(); λΆλͺ¨ νμ
μΌλ‘ κ°μ²΄λ₯Ό μμ±νλ€.
Child child2 = (Child) parent2; parent2 λ₯Ό Child νμ
μΌλ‘ λ€μ΄μΊμ€ν
μλ°μμ μ¬μ©ν μ μλ νμ
μΌλ‘ λ€μ΄μΊμ€ν
μ ClassCastException
μμΈλ₯Ό λ°μμν¨λ€.
child2.childMethod(); μ½λ μμ²΄κ° μ€νλμ§ μμκ°μ²΄κ° νΉμ ν΄λμ€λ‘ λ§λ€μ΄μ‘λμ§ κ²μ¬ν λ μ¬μ©
public class CastingMain5 {
public static void main(String[] args) {
Parent parent1 = new Parent();
System.out.println("parent1 νΈμΆ");
call(parent1);
//Child μΈμ€ν΄μ€κ° μλ
Parent parent2 = new Child();
System.out.println("parent2 νΈμΆ");
call(parent2);
//Child μΈμ€ν΄μ€κ° λ§μ
}
private static void call(Parent parent){
if(parent instanceof Child){
System.out.println("Child μΈμ€ν΄μ€κ° λ§μ");
Child child = (Child) parent;
} else {
System.out.println("Child μΈμ€ν΄μ€κ° μλ");
}
}
}
instanceof child λ‘ μ²΄ν¬ -> falseinstanceof child λ‘ μ²΄ν¬ -> trueinstanceof λ₯Ό μ¬μ©νλ©΄ κ°μ²΄μ ν΄λμ€ μ¬μ΄μ μμ κ΄κ³λ₯Ό μ½κ² νμΈν μ μλ€.λ¬Έμ
첫 λ²μ§Έ λΆμμ λΆμμ λΆλͺ¨λ₯Ό λ»νλ numer1, denom1, λ λ²μ§Έ λΆμμ λΆμμ λΆλͺ¨λ₯Ό λ»νλ numer2, denom2κ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§λλ€.
λ λΆμλ₯Ό λν κ°μ κΈ°μ½ λΆμλ‘ λνλμ λ λΆμμ λΆλͺ¨λ₯Ό μμλλ‘ λ΄μ λ°°μ΄μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄λ³΄μΈμ.
μΌμ°¨μ μΈ μ£Όμ μΈ λΆμμ λ§μ
μ ꡬνλ 건 κ°λ¨νμ§λ§ κΈ°μ½λΆμ λΌλ μ‘°κ±΄μ΄ λ΄ λ°λͺ©μ μ‘μλ€.
λΆμμ λΆλͺ¨μ μ΅λ 곡μ½μλ₯Ό ꡬν΄μΌ νλλ° μ΄λ₯Ό ꡬνλ λ°©λ²μΌλ‘ μ ν΄λ¦¬λ νΈμ λ²μ΄ μλ€λ κ²μ μκ²λμλ€.
μ ν΄λ¦¬λ νΈμ λ²μ΄λ?
2κ°μ μμ°μ(λλ μ μ) a, bμ λν΄μ aλ₯Ό bλ‘ λλ λλ¨Έμ§λ₯Ό rμ΄λΌνλ©΄(λ¨, a>b), aμ bμ μ΅λ곡μ½μλ bμ rμ μ΅λ곡μ½μμ κ°λ€. μ΄ μ±μ§μ λ°λΌ, bλ₯Ό rλ‘ λλ λλ¨Έμ§ r'λ₯Ό ꡬνκ³ , λ€μ rμ r'λ‘ λλ λλ¨Έμ§λ₯Ό ꡬνλ κ³Όμ μ λ°λ³΅νμ¬ λλ¨Έμ§κ° 0μ΄ λμμ λ λλλ μκ° aμ bμ μ΅λ곡μ½μμ΄λ€.
int numer3 = (numer1*denom2)+(numer2*denom1); //λΆμ
int denom3 = denom1 * denom2; //λΆλͺ¨
μ ν΄λ¦¬λ νΈμ λ² μ¬μ©public static int getGcd(int p, int q){
if (q == 0) return p;
return getGcd(q, p % q);
}
int p λ₯Ό int qλ‘ λλμμ λ λλ¨Έμ§μ κ°μ΄ 0μ΄λ©΄ return p;class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = {};
answer = new int[2];
int numer3 = (numer1*denom2)+(numer2*denom1);
int denom3 = denom1 * denom2;
int gcd = getGcd(numer3, denom3);
answer[0] = numer3/gcd;
answer[1] = denom3/gcd;
return answer;
}
public static int getGcd(int p, int q){
if (q == 0) return p;
return getGcd(q, p % q);
}
}
λΉμ½ν 머리λ₯Ό μ무리 κ΅΄λ €λ΄λ μ΅λ곡μ½μλ₯Ό ꡬνλ λ°©μμ μμ±ν μ μμλ€...
μ ν΄λ¦¬λ νΈμ λ² λ μμ μ²μ λ€μ΄λ΄€λ€. πππ
μ
λ¬Έμμ λ§νλ λ°λμ μ§λκ° λμκ°μ§ λͺ»ν΄ μ€λμ λ§λ¬΄λ¦¬λ μ¬νμΌλ‘ λ¬Όλ€μλ€.
λ΄μΌμ μ‘°κΈ λ μ μ§ν μ μκΈ°λ₯Ό λ°λλ€.