1. μ μ π»
κ³΅λ³ λ°ννμ μ΄λ μ¬μ μν λ©μλμ λ°ν νμ μ μμ ν΄λμ€μ λ©μλκ° λ°ννλ νμ μ νμ νμ μ΄ λ μ μλ€λ κ²μ΄λ€.
κΈ°μ‘΄μ μ€λ²λΌμ΄λ©μ 'λ©μλμ μ΄λ¦', 'λ§€κ° λ³μμ κ°μ, νμ , μμ', 'λ¦¬ν΄ νμ 'μ΄ κ°μμΌ νλ€. νμ§λ§ JDK1.5λΆν° κ³΅λ³ λ°ννμ μ΄ μΆκ°λλ©΄μ μ€λ²λΌμ΄λ©μ ν λ λ€λ₯Έ λ¦¬ν΄ νμ μ κ°μ§ μ μκ² λμλ€. μ¬κΈ°μ λ€λ₯Έ νμ μ΄λ λΆλͺ¨ν΄λμ€μ μ μλ λ©μλμ λ¦¬ν΄ νμ μ μλΈνμ μ λ§νλ€.
2. ꡬν(JAVA) πΌ
μ€λ²λΌμ΄λ©μμμ 리ν΄νμ μ λΆλͺ¨ν΄λμ€ λ¦¬ν΄ νμ μ μλΈνμ μ΄λ©΄ λλ€. μ΄ μ μ μ μν΄μ μ½λλ₯Ό 보μ.
class Parent {
Parent testMethod() {
return this;
}
}
class ChildA extends Parent {
@Override
ChildA testMethod() {
return this;
}
}
class ChildB extends Parent {
// κΌ μμ μ νμ
μ λ¦¬ν΄ νμ
μΌλ‘ νλ κ²μ΄ μλ
// λΆλͺ¨ ν΄λμ€ λ¦¬ν΄ νμ
μ μλΈνμ
μ΄λ©΄
// 무μμ΄λ μ§ κ°λ₯νλ€!!!
@Override
ChildA testMethod() {
return new ChildA();
}
}
public class Test {
public static void main(String[] args) {
Parent parent = new Parent();
Parent parentReturn = parent.testMethod();
ChildA childA = new ChildA();
ChildA childAReturn1 = childA.testMethod();
ChildB childB = new ChildB();
ChildA childANotB = childB.testMethod();
}
}
3. κ³΅λ³ λ°ννμ μ μ₯μ π·
1. λ²κ±°λ‘μ΄ νλ³νμ μ€μΌ μ μλ€.
// κΈ°μ‘΄ λ°©λ²
Lion copiedLion = (Lion)originalLion.clone();
// κ³΅λ³ λ°ννμ
μ μ΄μ©νλ λ°©λ²
Lion copiedLion = originalLion.clone();
μ΄λ μ½λμ κ°λ μ±, μ¬μ©μ±, μ μ§λ³΄μμ±μ λμμ μ€λ€.
2. λ ꡬ체μ μΈ λ°ν μ νμ κ°μ§ μ μλ€.
3. ClassCastExceptionμ λ°©μ§ν μ μλ€.
ClassCastExceptionμ΄λ ν΄λμ€ κ°μ ν λ³ν μ€λ₯μ λ°μνλ λ°νμ μμΈμ΄λ€. κ³΅λ³ λ°ννμ μ μ΄μ©νλ©΄ μ΄λ₯Ό λ°©μ§ν μ μλ€.
ν΄λΉ κΈμ
λ¨κΆ μ±λμ JAVAμ μ μ,
geeksforgeeksμ Covariant Return Types in Java
μ μ°Έκ³ νμμ΅λλ€.
'π JAVA > μ£Όμ κ°λ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JVM λ©λͺ¨λ¦¬ ꡬ쑰 (0) | 2023.03.24 |
---|---|
λ³μ (0) | 2023.03.21 |
λ§μ»€ μΈν°νμ΄μ€ (Marker Interface) (0) | 2023.03.09 |
Parsing(νμ±) - CSV, XML, JSON (0) | 2023.01.30 |
μ μΆλ ₯(I/O)(2) - μ§λ ¬ν(Serialization) (2) | 2023.01.29 |