-
JAVA μλ° μΆμν΄λμ€ abstractJAVA 2020. 8. 7. 23:58
π― μλ°μ μΆμν΄λμ€λ₯Ό μμλ³Έλ€.
μΆμν΄λμ€
"μ΄ ν¨μλ§μ λ°λμ μμμκ² μ£Όκ² λ€!"
public abstract class ν΄λμ€λͺ { :μΈμ€ν΄μ€ λ³μ :μΌλ° λ©μλ (concrete method) :μμ±μ :μΆμ λ©μλ (abstract method)}
abstract ν€μλλ₯Ό μ¬μ©ν΄ μΆμν΄λμ€λ₯Ό μ μΈνλ€. νμν΄λμ€μμ λ°λμ λΆλͺ¨ν΄λμ€μ λ©μλλ₯Ό μ¬μ©νλλ‘ κ°μ ν μ μλ ν΄λμ€λ€. `{λΈλ‘}`μ΄ μλ λ©μλλ₯Ό μΆμλ©μλλΌκ³ νλ©°, λΈλ‘μ΄ μκΈ° λλ¬Έμ μλ¬΄λ° μνλ°©λ²λ μ μλμ§ μμ μνλ€.
public abstract void λ©μλλͺ ([μΈμ]);
μ΄ μΆμλ©μλλ₯Ό νλλΌλ ν¬ν¨νλ©΄ μΆμν΄λμ€κ° λλλ°, ꡬνλμ§ μμ λ―Έμμ± μνμ μΆμμ μΈ ν΄λμ€λ₯Ό μλ―Ένλ€. μ΄ μΆμν΄λμ€λ₯Ό ꡬ체μ μΌλ‘ ꡬνν μ± μμ μμλ°μ μ¬μ©νλ νμν΄λμ€μκ² λκΈ΄λ€.μΆμν΄λμ€μλ μΆμλ©μλκ° ν¬ν¨λ μ μκΈ° λλ¬Έμ κ°μ²΄μμ±μ΄ λΆκ°λ₯νλ€. λ°λΌμ νμν΄λμ€λ μΌλ°ν΄λμ€λ₯Ό μ΄μ©νμ¬ μΆμν΄λμ€μ μΆμλ©μλλ₯Ό λ°λμ μ€λ²λΌμ΄λ©(μ¬μ μ) ν΄μΌνλ€.
abstract class MyClass{ int num = 3; public MyClass() {} public MyClass(int num) { this.num = num; } public void methodA() { System.out.println("methodA"); } public abstract void methodB(); } class MyClassImpl extends MyClass { public void print() { System.out.println(num); } @Override public void methodB() { System.out.println("methodB"); } } public class Ex07_1 { public static void main(String[] args) { MyClassImpl imp = new MyClassImpl(); imp.print(); imp.methodB(); } }
MyClass ν΄λμ€λ ꡬνλμ§ μμ μΆμλ©μλ methodBλ₯Ό ν¬ν¨νκ³ μκΈ° λλ¬Έμ μΆμν΄λμ€λ‘ μμ±ν΄μΌ νλ€. μ΄ μΆμν΄λμ€λ₯Ό ꡬννκΈ° μν΄μ MyClassλ₯Ό μμλ°λ μΌλ° ν΄λμ€ MyClassImplμ λ§λ€κ³ , μΆμλ©μλ methodBλ₯Ό μ€λ²λΌμ΄λ©ν΄μ μλ μλ {λΈλ‘}μ μ΄κ³ , κ·Έ μμ ꡬ체μ μΌλ‘ μνμ½λλ₯Ό λ§λ€μ΄μ ꡬν μ무λ₯Ό μλ£νλ€.
κ²°κ³Ό μ€νμ μν΄ mainν¨μ μμ ꡬνμ΄ μλ£λ μΌλ°ν΄λμ€ MyClassImplμ κ°μ²΄μμ±νκ³ νλ¦°νΈν¨μμ methodBν¨μλ₯Ό νΈμΆνλ€.
MyClass my = new MyClassImpl();
μΆμν΄λμ€λ κ°μ²΄μμ±μ΄ λΆκ°λ₯νμ§λ§ μμ κ°μ΄ λ€νμ±μ μ μ©ν΄μ λ³μνμ μΌλ‘ μΆμν΄λμ€λ₯Ό μ¬μ©ν μλ μλ€.
ν΄λμ€λ₯Ό μͺΌκ°μ μΆμν΄λμ€ μ¬μ©ν΄λ³΄κΈ°
public abstract class Abstract { private int num; public abstract void a(); //λΈλ‘μ΄ μλ μΆμλ©μλ μ μΈ public abstract int b(); //λΈλ‘μ΄ μλ μΆμλ©μλ μ μΈ public abstract void c(int x); //λΈλ‘μ΄ μλ μΆμλ©μλ μ μΈ public int getNum() { return num; } public void setNum(int num) { this.num = num; } public Abstract() { super(); } public Abstract(int num) { super(); this.num = num; } }
abstractλ₯Ό λΆμ¬ μΆμν΄λμ€μμ μ μΈν Abstract ν΄λμ€λ₯Ό λ§λ λ€. μ΄ μμλ a, b, c 3κ°μ μΆμλ©μλκ° λ€μ΄μλ€. μΈλΆν΄λμ€μμ private λ³μμΈ numμ μ κ·Όν μ μκ² getterμ setter ν¨μλ₯Ό λ§λ€κ³ μμ±μλ₯Ό λ§λ λ€.
public class ConcreteClass extends Abstract{ public ConcreteClass() { super(); } public ConcreteClass(int num) { super(num); } @Override public void a() { //μΆμλ©μλ νμλ§ κ·Έλλ‘ μμλ°κ³ System.out.println("a"); //ꡬνμ μ¬κΈ°μνλ€ } @Override public int b() { System.out.println("b"); return 0; } @Override public void c(int x) { System.out.println("c"); } }
μΆμν΄λμ€λ₯Ό μμλ°λ μΌλ°ν΄λμ€ ConcreteClassλ₯Ό λ§λ λ€. κ³ μ ν λ³μλ μκ³ λΆλͺ¨μμ μμλ°μ numλ§ μμ±μλ‘ λ§λ€μλ€. μ΄μ λΆλͺ¨μ λ―Έμμ± μΆμλ©μλλ₯Ό μμ ν ννλ‘ κ΅¬ννκΈ° μν΄ μΆμν΄λμ€κ° κ°μ§ μΆμλ©μλ 3κ°λ₯Ό κ·Έλλ‘ μ€λ²λΌμ΄λ© ν΄μ κ΄νΈ μμ μλ‘μ΄ λ΄μ©μ ꡬννλ€.
public class ConcreteClass2 extends Abstract{ public ConcreteClass2() { super(); } public ConcreteClass2(int num) { super(num); } @Override public void a() { System.out.println("ConcreteClass2====a"); } @Override public int b() { System.out.println("ConcreteClass2====b"); return 0; } @Override public void c(int x) { System.out.println("ConcreteClass2====c"); } }
μΆμν΄λμ€λ₯Ό μμλ°λ λ λ€λ₯Έ ConcreteClass2 ν΄λμ€λ₯Ό λ§λ λ€. μΆμν΄λμ€λ ν΄λμ€μ΄κΈ° λλ¬Έμ μμμ νλμ λΆλͺ¨λ§ κ°μ§ μ μλ λ¨μΌμμλ§ κ°λ₯νλ€. μ¬κΈ°μλ μμ μΆμλ©μλλ₯Ό μ€λ²λΌμ΄λ©ν΄μ ꡬν μ무λ₯Ό μλ£νλ€.
public class TestMain { public static void main(String[] args) { // Abstract x = new Abstract(); ConcreteClass y = new ConcreteClass(100); System.out.println(y.getNum()); y.a(); int n = y.b(); y.c(100); ConcreteClass2 y2 = new ConcreteClass2(); System.out.println(y2.getNum()); y2.a(); int n2 = y2.b(); y2.c(100); } }
νλ‘κ·Έλ¨μ μ€νν μ μλ main λ©μλλ₯Ό κ°μ§ TestMain ν΄λμ€λ₯Ό λ§λ λ€. λΆμμ ν μΆμν΄λμ€λ κ°μ²΄μμ±μ ν μ μκΈ° λλ¬Έμ μ£Όμμ²λ¦¬λ λ¬Έμ₯μ μ¬μ©ν μ μλ€. μΆμν΄λμ€λ₯Ό μμλ°μ λ§λ€μ΄μ§ ConcreteClassμ κ°μ²΄λ₯Ό μμ±νλ©° μΈμ numμ 100μ λ£μ΄ μμ±μμ κΈ°λ³Έκ°μ μ μ₯νλ€. κ·Έλ¦¬κ³ μ°Έμ‘°λ³μ yλ‘ λΆλͺ¨ν΄λμ€μ getNum λ©μλλ₯Ό νΈμΆνκ³ μλ€.
κ·Έλ°λ° getNum λ©μλλ ConcreteClassμ μ λ§λ€μ΄μ€¬λλ° μ΄λ»κ² μΆλ ₯μ΄ λ κΉ? μμκ΄κ³μμ μμν΄λμ€κ° λΆλͺ¨μ λͺ¨λ λ©€λ²λ₯Ό μ μΈ μμ΄ μ¬μ©ν μ μλ€.
int n = y.b();
μμ y.b()λ b ν¨μμμ μμ±ν λ¬Έμ bλ₯Ό νλ¦°νΈνλ κ±Έ λ³Ό μ μκ³ , int n μλ 리ν΄κ° 0μ΄ μ μ₯λμ΄ μλ€. y.c() ν¨μλ μΈμλ‘ 100μ λ£κΈ΄νλλ° λ λ£λ cλ₯Ό μΆλ ₯νλ λ©μλλ‘ λ§λ€μ΄μ‘λ€.ConcreteClass2 ν΄λμ€λ μμ±μ νΈμΆ μΈμμ μ무κ²λ μ λ ₯νμ§ μμκΈ° λλ¬Έμ κΈ°λ³Έμμ±μλ₯Ό νΈμΆνλ€. intμ κΈ°λ³Έκ°μΈ 0μΌλ‘ μ΄κΈ°νλλ€. λλ¨Έμ§ μ½λλ μμκ°μ λ°©μμΌλ‘ μ€νλλ€.
π NEXT : μλ° μΈν°νμ΄μ€ 곡λΆνκΈ°
λ°μν'JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JAVA μλ° μ€μ²©ν΄λμ€, comparator μΈν°νμ΄μ€ (2) 2020.08.09 JAVA μλ° μΈν°νμ΄μ€, λ컀νλ§ (0) 2020.08.08 JAVA μλ° μ€λ²λΌμ΄λ©, λ€νμ± (0) 2020.08.06 JAVA μλ° μμ, μ κ·Όμ§μ μ (0) 2020.08.06 JAVA μλ° μ€λ²λ‘λ©, this, final, static, varags (0) 2020.08.04