7-3μμ(μΆμ ν΄λμ€)
κ°μ²΄λ₯Ό μ§μ μμ±ν μ μλ ν΄λμ€λ₯Ό μ€μ²΄ ν΄λμ€λΌκ³ νλ€λ©΄ μ΄ ν΄λμ€λ€μ 곡ν΅μ μΈ νΉμ±μ μΆμΆν΄μ μ μΈν ν΄λμ€λ₯Ό μΆμ ν΄λμ€λΌκ³ νλ€.
*μΆμ ν΄λμ€κ° λΆλͺ¨, μ€μ²΄ ν΄λμ€κ° μμμΌλ‘ ꡬνλμ΄ μ€μ²΄ ν΄λμ€λ μΆμ ν΄λμ€μ λͺ¨λ νΉμ±μ λ¬Όλ €λ°κ³ , μΆκ°μ μΈ νΉμ±μ κ°μ§ μ μλ€. μ¬κΈ°μ νΉμ±μ΄λ νλμ λ©μλλ₯Ό λ§νλ€.
μΆμ ν΄λμ€μ μ©λ
1. 곡ν΅λ νλμ λ©μλμ μ΄λ¦μ ν΅μΌν λͺ©μ
μ€μ²΄ ν΄λμ€λ₯Ό μ€κ³νλ μ¬λμ΄ μ¬λ¬ μ¬λμΌ κ²½μ°, μ€μ²΄ ν΄λμ€λ§λ€ νλμ λ©μλκ° μ κ°κΈ° λ€λ₯Έ μ΄λ¦μ κ°μ§ μ μλ€.
2. μ€μ²΄ ν΄λμ€λ₯Ό μμ±ν λ μκ° μ μ½
곡ν΅μ μΈ νλμ λ©μλλ μΆμ ν΄λμ€μΈ Phoneμ λͺ¨λ μ μΈν΄λκ³ , λ€λ₯Έ μ λ§ μ€μ²΄ ν΄λμ€μ μ μΈνλ©΄ μ€μ²΄ ν΄λμ€λ₯Ό μμ±νλ λ° μκ°μ μ μ½ν μ μμ΅λλ€.
μΆμ ν΄λμ€ μ μΈ
μΆμ ν΄λμ€λ₯Ό μ μΈν λμλ ν΄λμ€ μ μΈμ abstract ν€μλλ₯Ό λΆμ¬μΌ νλ€. abstractλ₯Ό λΆμ΄λ©΄ new μ°μ°μλ₯Ό μ΄μ©ν΄μ κ°μ²΄λ₯Ό λ§λ€μ§ λͺ»νκ³ , μμμ ν΅ν΄ μμ ν΄λμ€λ§ λ§λ€ μ μλ€.
ex)
public abstract class ν΄λμ€ {
//νλ
//μμ±μ
//λ©μλ
}
-> μΆμ ν΄λμ€λ μΌλ° ν΄λμ€μ λ§μ°¬κ°μ§λ‘ νλ, μμ±μ, λ©μλ μ μΈμ ν μ μλ€. new μ°μ°μλ‘ μ§μ μμ±μλ₯Ό νΈμΆν μ μμ§λ§ μμ κ°μ²΄κ° μμ±λ λ super()λ₯Ό νΈμΆν΄μ μΆμ ν΄λμ€ κ°μ²΄λ₯Ό μμ±νλ―λ‘ μΆμ ν΄λμ€λ μμ±μκ° λ°λμ μμ΄μΌ νλ€.
ex)
μΆμ ν΄λμ€
public abstract class Phone {
//νλ
public String owner;
//μμ±μ
public Phone(String owner) {
this.owner = owner;
}
//λ©μλ
public void turnOn() {
System.out.println("ν° μ μμ μΌλλ€.");
}
public void turnOff() {
System.out.println("ν° μ μμ λλλ€.");
}
}
μ€μ²΄ ν΄λμ€
public class SmartPhone extends Phone {
//μμ±μ
public SmartPhone(String owner) {
super(owner);
}
//λ©μλ
public void internetSearch() {
System.out.println("μΈν°λ· κ²μμ ν©λλ€.");
}
}
μ€ν ν΄λμ€
public class PhoneExample {
public static void main(String[] args) {
//Phone phone = new Phone();
SmartPhone smartphone = new SmartPhone("νκΈΈλ");
smartPhone.turnOn();
smartPhone.internetSearch();
smartPhone.turnOff();
}
}
μΆμ λ©μλμ μ¬μ μ
μΆμ ν΄λμ€λ μ€μ²΄ ν΄λμ€κ° 곡ν΅μ μΌλ‘ κ°μ ΈμΌ ν νλμ λ©μλλ€μ μ μν΄λμ μΆμμ μΈ ν΄λμ€λ‘, μ€μ²΄ ν΄λμ€μ λ©€λ²(νλ, λ©μλ)λ₯Ό ν΅μΌνλ λ° λͺ©μ μ΄ μλ€.
νμ§λ§ λ©μλμ μ μΈλ§ ν΅μΌνκ³ , μ€ν λ΄μ©μ μ€μ²΄ ν΄λμ€λ§λ€ λ¬λΌμΌ νλ κ²½μ°κ° μλ€. μλ₯Ό λ€μ΄, λͺ¨λ λλ¬Όμ μ리λ₯Ό λ΄κΈ° λλ¬Έμ Animal μΆμ ν΄λμ€μμ sound()λΌλ λ©μλλ₯Ό μ μνλ€κ³ κ°μ νμ. κ·Έλ λ€λ©΄ μ΄λ€ μ리λ₯Ό λ΄λλ‘ ν΄μΌ νλλ°, μ΄κ²μ μ€μ²΄ ν΄λμ€μμ μ§μ μμ±ν΄μΌ νλ€. μλνλ©΄ λλ¬Όμ λ€μν μ리λ₯Ό λ΄λ―λ‘ μ΄κ²μ μΆμ ν΄λμ€μμ ν΅μΌμ μΌλ‘ μμ±ν μ μκΈ° λλ¬Έμ΄λ€. κ·Έλ λ€κ³ ν΄μ sound() λ©μλλ₯Ό μ€μ²΄ ν΄λμ€μμ μμ±νλλ‘ νλ©΄ sound() λ©μλλ₯Ό μμ΄λ²λ¦¬κ³ μμ±νμ§ μμ κ²½μ° λλ¬Όμ μ리λ₯Ό λΈλ€λ κ²μ μλ°°λλ€.
μ΄λ° κ²½μ°λ₯Ό μν΄μ μΆμ ν΄λμ€λ μΆμ λ©μλλ₯Ό μ μΈν μ μλ€.
μΆμ λ©μλ
abstract ν€μλμ ν¨κ» λ©μλμ μ μΈλΆλ§ μκ³ λ©μλ μ€ν λ΄μ©μΈ μ€κ΄νΈ {}κ° μλ λ©μλλ₯Ό λ§νλ€.
ex)
[public | protected] abstract 리ν΄νμ λ©μλμ΄λ¦(λ§€κ°λ³μ, ...);
μ΄λ κ² μΆμ ν΄λμ€ μ€κ³ μ νμ ν΄λμ€κ° λ°λμ μ€ν λ΄μ©μ μ±μ°λλ‘ κ°μ νκ³ μΆμ λ©μλκ° μμ κ²½μ° ν΄λΉ λ©μλλ₯Ό μΆμ λ©μλλ‘ μ μΈνλ€.
ex)
public abstract class Animal {
public abstract void sound();
}
-> μ΄λ κ² νλ©΄ Animal ν΄λμ€λ₯Ό μμνλ νμ ν΄λμ€λ λλ¬Όλ§λ€ κ³ μ ν μ리λ₯Ό λ΄λλ‘ sound() λ©μλλ₯Ό μ¬μ μν΄μΌ νλ€.