1. λ€νμ± μμ
- λ€νμ±μ μ΄ν΄νκΈ° μν΄μλ λ€νμ μ°Έμ‘°, λ©μλ μ€λ²λΌμ΄λ© λ κ°μ μ΄λ‘ μ μμμΌ νλ€.
1) λ€νμ μ°Έμ‘°
public Class Parent {
public String value = "parent";
public void parentMethod(){
System.out.println("Parent.parentMethod");
}
}
public class Child extends Parent {
public String value = "child";
public void childMethod() {
System.out.println("Child.childMethod");
}
}
//λ€νμ μ°Έμ‘° : λΆλͺ¨λ μμμ νμ μ μλ€.
public class PolyMain {
public static void main(String[] args) {
//λΆλͺ¨ λ³μκ° μμ μΈμ€ν΄μ€ μ°Έμ‘°(λ€νμ μ°Έμ‘°)
System.out.println("Parent -> Child");
Parent parent = new Child();
parent.parentMethod(); //Parent.parentMethod
//μμμ λΆλͺ¨λ₯Ό λ΄μ μ μλ€(Child child = new Parent(); μλ¨)
}
}
- λΆλͺ¨ νμ μ μμ νμ μ λ΄μ μ μλ€.
- Parent parentλ λΆλͺ¨ νμ μ΄λ€. new Childλ₯Ό ν΅ν΄ μμ±λ κ²°κ³Όλ Child νμ μ΄λ€. μ¦ μμ νμ κΉμ§ μ°Έμ‘°ν μ μλ€. μμκ° μλ€λ©΄ κ·Έ νμ νμ λ μ°Έμ‘°ν μ μλ€.
* λ€νμ μ°Έμ‘°μ νκ³
- μ μ²λΌ Parent parent = new Child() μν©μμ childMethod()λ₯Ό μ°ΎμΌλ©΄ Parent ν΄λμ€λΆν° μμν΄μ κΈ°λ₯μ μ°Ύμν λ°, μμ κ΄κ³λ λΆλͺ¨ λ°©ν₯μΌλ‘ μ¬λΌκ° μ μμ§λ§, μμ κ΄κ³λ‘ λ΄λ €κ° μ μμΌλ―λ‘ μ»΄νμΌ μ€λ₯κ° λ°μνλ€.
- μΊμ€ν μ ν΅ν΄ μ΄λ₯Ό ν΄κ²°ν μ μλ€.
2. λ€νμ±κ³Ό μΊμ€ν
public class CastingMain {
public static void main(String[] args){
//λΆλͺ¨ λ³μκ° μμ μΈμ€ν΄μ€ μ°Έμ‘°(λ€νμ μ°Έμ‘°)
Parent parent = new Child();
//μμμ κΈ°λ₯μ νΈμΆ λΆκ°
//parent.childMethod();
//λ€μ΄μΊμ€ν
(λΆλͺ¨ νμ
-> μμ νμ
)
Child child = (Child) parent; //λ€μ΄μΊμ€ν
μ ν΅ν΄ λΆλͺ¨νμ
μ μμ νμ
μΌλ‘ λ³ν ν λμ
μλ
child.childMethod();
}
}
1) μΊμ€ν μ μ’ λ₯
* μΌμμ λ€μ΄ μΊμ€ν
public class CastingMain {
publuc static void main(String[] agrs) {
Parent parent = new Child();
//μΌμμ λ€μ΄ μΊμ€ν
- ν΄λΉ λ©μλλ₯Ό νΈμΆνλ μκ°λ§ λ€μ΄μΊμ€ν
(Child)parent).childMethod(); //λ€μ΄μΊμ€ν
μ ν΅ν΄ λΆλͺ¨νμ
μ μμ νμ
μΌλ‘ λ³ν ν κΈ°λ₯ νΈμΆ
}
}
- μ μ½λλ Parent νμ μ μμλ‘ Childλ‘ λ³κ²½νλ€. μ΄ν λ©μλλ₯Ό νΈμΆν λ Child νμ μμ μ°Ύμ μ€ννλ€.
- ν΄λΉ μ°Έμ‘°κ°μ κΊΌλ΄κ³ κΊΌλΈ μ°Έμ‘°κ°μ΄ Childνμ μ΄ λλ κ²μ΄λ€. λ°λΌμ parent νμ μ Parentλ‘ μ μ§λλ€.
* μ μΌμ€ν
public class CastingMain{
public static void(String[] args){
Child child = new Child();
Parent parent1 = (Parent) child; //μ
μΊμ€ν
μ μλ΅ κ°λ₯, μλ΅ κΆμ₯
Parent parent2 = child; // μλ΅ ver
parent1.parentMethod();//Parent.parentMethod
}
}
- Child νμ μ Parent νμ μ λμ νλ κ²½μ° μ¬μ©λλ€.
- λΆλͺ¨ νμ μΌλ‘ λ³ννλ κ²½μ°μλ (νμ )μ μλ΅ν μ μλ€.
* μ¬μ©ν μ μλ νμ μΌλ‘ λ€μ΄μΊμ€ν ν κ²½μ° ClassCastExceptionμ΄λΌλ μμΈλ₯Ό λ°μμν€λ―λ‘, λ€μ΄μΊμ€ν μ μ‘°μ¬ν΄μ μ¬μ©ν΄μΌ νλ€.
3. instanceof
- λ³μκ° μ°Έμ‘°νλ μΈμ€ν΄μ€μ νμ μ νμΈνκ³ μΆμ λ μ¬μ©λλ€.
public class CastingMain{
private static void call(Parent parent) {
if (parent instanceof Child) {
System.out.println("Child μΈμ€ν΄μ€ λ§μ");
Child child = (Child) parent;
child.childMethod();
}
}
}
- μ λ§€μλλ λ§€κ°λ³μλ‘ λμ΄μ¨ parentκ° μ°Έμ‘°νλ νμ μ λ°λΌμ λ€λ₯Έ λͺ λ Ήμ μνν¨.
- λ€μ΄μΊμ€ν μ μννκΈ° μ μλ μμ²λΌ instanceofλ₯Ό μ¬μ©ν΄ μνλ νμ μΌλ‘ λ³κ²½ κ°λ₯νμ§ νμΈν λ€μ μννλ κ²μ΄ μμ ν¨.
4. λ€νμ±κ³Ό λ©μλ μ€λ²λΌμ΄λ©
public class OverrideingMain {
public static void main(String[] args) {
Parent parent = new Child();
System.out.println("value = " + parent.value); //value = parent
//λ©μλ μ€λ²λΌμ΄λ©
parent.methid(); //Child.method
}
}
- parent λ³μλ Parent νμ . λ°λΌμ parent.value / parent.methodλ₯Ό νΈμΆνλ©΄ Parentμμ μ°Ύμμ μ€νν¨
- μ€λ²λΌμ΄λ© λ λ©μλλ νμ μ°μ κΆμ κ°μ§λ€. λλ¬Έμ Parent.methodκ° μλ, Child.method()κ° μ€νλλ€.
5. λ€νμ± νμ©
1) λ€νμ±μ μ₯μ
μ) κ°μ λ€λ₯Έ λλ¬Ό μ리λ₯Ό ν μ€νΈ νλ νλ‘κ·Έλ¨μ λ§λ€κΈ°
- λ€νμ±μ μ¬μ©νμ§ μλ κ²½μ°
public class Dog {
public void sound(){
System.out.println("λ©λ©")
}
}
public class Cat {
public void sound(){
System.out.println("λ©λ©")
}
}
public class Caw {
public void sound(){
System.out.println("λ©λ©")
}
}
public class AnimalMain {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
Caw caw = new Caw();
//μ΄λΆλΆμ΄ κ³μ μ€λ³΅λ¨
System.out.println("λλ¬Ό μ리 ν
μ€νΈ μμ");
dog.sound();
System.out.println("λλ¬Ό μ리 ν
μ€νΈ μ’
λ£");
System.out.println("λλ¬Ό μ리 ν
μ€νΈ μμ");
cat.sound();
System.out.println("λλ¬Ό μ리 ν
μ€νΈ μ’
λ£");
System.out.println("λλ¬Ό μ리 ν
μ€νΈ μμ");
caw.sound();
System.out.println("λλ¬Ό μ리 ν
μ€νΈ μ’
λ£");
}
}
- μ€λ³΅μ μ κ±°νκΈ° μν΄μλ ν΅μμ μΌλ‘ λ©μλλ₯Ό μ¬μ©νκ±°λ, λ°°μ΄ λλ forλ¬Έμ μ¬μ©νμ§λ§ Dog, Cat, Cawλ λͺ¨λ λ€λ₯Έ ν΄λμ€λΌ λΆκ°λ₯νλ€.
- λ€νμ±μ μ¬μ©νμ¬ μ€λ³΅ μμ κΈ°
public calss Animal {
public void sound() {
System.out.println("λλ¬Ό μΈμ μ리");
}
}
calss Dog extends Animal {
@Override
public void sound(){
System.out.println("λ©λ©");
}
}
calss Cat extends Animal {
@Override
public void sound(){
System.out.println("λμΉ");
}
}
calss Caw extends Animal {
@Override
public void sound(){
System.out.println("μλ§€");
}
}
class AnimalPolyMain {
public static void main(String args){
Dog dog = new Dog();
Cat cat = new Cat();
Caw caw = new Caw();
Animal[] animalArr = {dog, cat, caw};
//λ³νμ§ μλ μ½λ
for (Animal animal : animalArr{
System.out.println("λλ¬Ό μ리 ν
μ€νΈ μμ");
animal.sound();
System.out.println("λλ¬Ό μ리 ν
μ€νΈ μ’
λ£");
}
}
}
- Animal ν΄λμ€λ₯Ό μμ λ°λ κ³³μμ sound() λ©μλ μ€λ²λΌμ΄λ©μ νμ§ μλ μ€μλ₯Ό λ°©μ§νκΈ° μν΄μλ μΆμ λ©μλλ₯Ό νμ©νλ©΄ λλ€.
6. μΆμ ν΄λμ€
1) μΆμ ν΄λμ€
- Animal classμ κ°μ΄ λΆλͺ¨ ν΄λμ€λ μ 곡νμ§λ§ μ€μ μμ±λλ©΄ μλλ ν΄λμ€λ₯Ό μΆμ ν΄λμ€λΌκ³ ν¨.
- μΆμ ν΄λμ€λ μΆμμ μΈ κ°λ μ μ 곡νλ ν΄λμ€. μ¦, μΈμ€ν΄μ€κ° μ‘΄μ¬νμ§ μκ³ μμμ λͺ©μ μΌλ‘ μ¬μ©λ¨.
*μ¬μ© μ) abstract class AbstractAnimal {...}
- μΆμ ν΄λμ€λ κΈ°μ‘΄ ν΄λμ€μ μμ ν κ°μΌλ new AbstracAnima()κ³Ό κ°μ΄ μ§μ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ λͺ»νλ μ μ½μ΄ μΆκ°λ¨.
2) μΆμ λ©μλ
- μμ ν΄λμ€κ° λ°λμ μ€λ²λΌμ΄λ© ν΄μΌ νλ λ©μλλ₯Ό λΆλͺ¨ ν΄λμ€μ μ μνλ κ².
- μ€μ²΄κ° μ‘΄μ¬νμ§ μκ³ λ©μλ λ°λκ° μλ€.
*μ¬μ© μ) public abstract void sound();
- μΆμ λ©μλκ° νλλΌλ μμΌλ©΄ μΆμ ν΄λμ€λ‘ μ μΈν΄μΌ νλ€.
- μΆμ λ©μλλ μμ λ°λ μμ ν΄λμ€κ° λ°λμ μ€λ²λΌμ΄λ© ν΄μ μ¬μ©ν΄μΌ νλ€.
3) μμ μΆμ ν΄λμ€
- λͺ¨λ λ©μλκ° μΆμ λ©μλμΈ μΆμ ν΄λμ€
- μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.
- μμμ μμμ λͺ¨λ λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν΄μΌ νλ€.
- μ£Όλ‘ λ€νμ±μ μν΄ μ¬μ©λλ€.
- μλ°λ μ΄ κΈ°λ₯μ νΈλ¦¬νκ² μ¬μ©ν μ μλ μΈν°νμ΄μ€λΌλ κ°λ μ μ¬μ©νλ€.
7. μΈν°νμ΄μ€
- μμ μΆμ ν΄λμ€λ₯Ό λ νΈλ¦¬νκ² μ¬μ©ν μ μλ κΈ°λ₯
- μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.
- μμμ λͺ¨λ λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν΄μΌ νλ€.
- μ£Όλ‘ λ€νμ±μ μν΄ μ¬μ©λλ€.
- μΈν°νμ΄μ€ λ©μλλ λͺ¨λ public, abstract μ΄λ€.
- λ©μλμ public abstractλ₯Ό μλ΅ν μ μλ€.
- λ€μ€ ꡬνμ μ§μνλ€.
- μΈν°νμ΄μ€λ class λμ μ interfaceλ‘ μ μΈλλ€.
- μΈν°νμ΄μ€λ₯Ό μμλ°μ λλ implementsλΌλ ꡬν ν€μλλ₯Ό μ¬μ©νλ€.
*μΈν°νμ΄μ€λ₯Ό μ¬μ©ν΄μΌνλ μ΄μ
- μ μ½μ λ§λ€μ΄ λ°λμ ꡬνν΄μΌ νλ νλͺ©λ€μ μ§μ ν μ μλ€.
- λ€μ€ ꡬνμ΄ κ°λ₯νλ€.
1) λ€μ€ ꡬν
- μΈν°νμ΄μ€λ λͺ¨λ μΆμ λ©μλλ‘ μ΄λ£¨μ΄μ Έ μκΈ° λλ¬Έμ λ€μ€ ꡬνμ΄ κ°λ₯νλ€.
public interface InterfaceA {
void methodA();
void methodCommon();
}
public interface InterfaceB {
void methodB();
void methodCommon();
}
public class Child implements InterfaceA, InterfaceB {
@Override
public void method(){
System.out.println("Child.methodA");
}
@Override
public void methodB(){
System.out.println("Child.methodB");
}
@Override
public void methodCommon(){
System.out.println("Child.methodCommon");
}
}
public class DiamondMain {
public static void main(String[] args){
InterfaceA a = new Child();
a.methodA();
a.methodCommon();
InterfaceB b = new Child();
b.methodB();
b.methodCommon();
}
}
μΆμ² : κΉμνμ μ€μ μλ°-κΈ°λ³ΈνΈ
λκΈ