ν°μ€ν 리 λ·°
[ JAVA ] μλ°μ μΆμν΄λμ€( abstract class )μ μΆμλ©μλ(abstract method )
Kithub 2023. 2. 14. 02:07μΆμν΄λμ€ β
- λ―Έμμ±λ μ€κ³λλ‘ λΉμ ν μ μμ(=νλ μ)
- μΆμλ©μλ(λ―Έμμ± λ©μλ)λ₯Ό ν¬ν¨νκ³ μλ ν΄λμ€
- μΆμλ©μλλ μμμ ν΅ν΄μλ§ μμ±λμ΄μ§ μ μμ
- 곡ν΅λ λΆλΆμ λν΄μ μμ ν΄λμ€μκ² μμμ΄ μ΄λ£¨μ΄μ§
- μΆμν΄λμ€λ abstract ν€μλλ₯Ό λΆμ¬ μμ±ν¨
abstract class Robot{
...
}
μΆμλ©μλ( abstract method ) β
- λ©μλλ₯Ό μ μΈνμ§λ§ λ©μλμ λ΄μ©μ΄ μ‘΄μ¬νμ§ μμ
- λ©μλλ§ κ΅¬μ±νκ³ μμΈκ΅¬νμ μμμ ν΅ν΄ μ΄λ£¨μ΄ μ§λλ‘ κ°μ ν¨.
- λ©μλμ λ΄μ©μ λΉμλλ μ΄μ λ μμν΄λμ€ λ§λ€μ ꡬνλ΄μ©μ΄ λ¬λΌμ§ μ μκΈ° λλ¬Έ
- ꡬνλ΄μ©μ΄ μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ { } λΈλ‘ μμ΄ λ©μλλ₯Ό μ μν¨
abstract String attack();
μ κΉλ§μ β
μΆμλ©μλλ μ΄μ°¨νΌ λ©μλμΈλ° μΌλ° λ©μλλ‘ λ§λ€μ΄λ λμ§ μλμ β
κ·Έλ λ€. μ΄μ°¨νΌ ꡬν λ΄μ©μ λ©μλμλ§ μμ±λλ©΄ λλ€. μ΄λ λ©μλμλ ꡬνλ΄μ©λ§ μ λλ‘ μμ±νκ³ λμνλ©΄ λλ κ²μ΄λ€. κ·Έλ°λ°λ abstract ν€μλλ₯Ό μ¬μ©ν΄ μΆμλ©μλλ₯Ό λ§λλ μ΄μ λ λ°λ‘ κ°μ μ±μ λΆμ¬νκΈ° μν΄μλ€. μλ‘ λ€μ΄ μλμ°¨λ₯Ό λ§λ λ€κ³ κ°μ ν΄ λ³΄μ. νΈλ€, ν , μμ§, λΈλ μ΄ν¬μ κ°μ ꡬμ±λ€μ μλμ°¨κ° λ§λ€μ΄μ§κΈ° μν΄μ λ°λμ νμλΆκ°κ²°ν λΆν νΉμ κΈ°λ₯λ€μ΄λ€. νΉ, μ΄ μ€ νλλΌλ λλ½λμ΄ μλμ°¨λ‘ λ§λ€μ΄μ§λ€λ©΄ κ·Έ λꡬλ μ΄λ° μλμ°¨λ₯Ό νκ³ μΆμ΄ νμ§ μμ κ²μ΄λ€. μ¦, μνλ μννΈμ¨μ΄λ₯Ό λ§λλ κ³Όμ μμ μ£Όμν κΈ°λ₯μ΄ λλ½λμ§ μκ³ λ°λμ ꡬνλλλ‘ κ°μ νλ κ²μ μΆμλ©μλλΌκ³ μ΄ν΄νλ©΄ λλ€.
μΆμν΄λμ€ μμ± π
μ¬λ¬ ν΄λμ€λ₯Ό 곡ν΅μ μΌλ‘ μ¬μ©λ μ μλ ν΄λμ€λ₯Ό λ°λ‘ μμ±νκΈ°λ νκ³ , κΈ°μ‘΄μ ν΄λμ€μ 곡ν΅μ μΈ λΆλΆμ λ½μμ μΆμν΄λμ€λ‘ λ§λ€μ΄ μμνλλ‘ νλ κ²½μ°λ μλ€. μμμ΄ μμ ν΄λμ€λ₯Ό λ§λλλ° λΆλͺ¨ ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄λΌλ©΄, μΆμνλ κΈ°μ‘΄μ ν΄λμ€λ‘λΆν° 곡ν΅λΆλΆμ λμΆν΄ λΆλͺ¨ ν΄λμ€λ₯Ό λ§λλ κ²μ΄λΌ ν μ μλ€. λλ¬Έμ μΆμνλ₯Ό ꡬννλ€λ κ²μ μ μ°¨ κΈ°λ₯μ λ΄μ©μ΄ μμΈν(μμ) λλ€λ μ΄μΌκΈ°κ° λλ€. λ°λλ‘ κ΅¬μ²΄νλ₯Ό μΆμν νλ€λ κ²μ κΈ°λ₯μ λ΄μ©μ΄ κ°κ²°ν΄μ§κ³ 곡ν΅μ κ΄μ¬μ¬λ§ λ¨κ² λλ€.
μ°λ¦¬λ 'λ‘λ΄'μ ꡬννκΈ° μν΄μλ λ€μμ μκ°ν΄ λ³Ό μ μλ€.
λ‘λ΄μ 곡격μ ν μ μλ€.
λ‘λ΄μ μ΄λμ ν μ μλ€.
λ‘λ΄μ λ°©μ΄λ₯Ό ν μ μλ€.
λ‘λ΄μ λ³μ μ ν μ μλ€.
λ‘λ΄μ λ€μν μ’ λ₯κ° μλ€.
μμ κ°μ΄ κ°κ°μ λ‘λ΄(μμν΄λμ€)μ΄ κ°μ§μ μλ 곡ν΅λ μ±μ§μ λ½μλΌ μ μλ€. μ΄λ₯Ό μΆμν΄λμ€λ‘ μμ±ν΄ 보μ.
Robot.java
public abstract class Robot {
//곡격
abstract void attack();
//μ΄λ
abstract void move();
//λ°©μ΄
abstract void defend();
//λ³μ
abstract void transform();
}
λ‘λ΄μ κ³΅ν΅ μ±μ§μΈ 곡격(attack), μ΄λ(move), λ°©μ΄(defend), λ³μ (transform)μ μΆμλ©μλλ‘ λ§λ€μ΄μ£Όμλ€.
μ΄μ Robotμ λ§λ€κΈ° μν΄μλ λ°λμ μ΄ 4κ°μ§μ κΈ°λ₯μ μΆκ°ν΄ μ£Όμ΄μΌ μμ ν λ‘λ΄μ΄ νμνκ² λλ€.
μ λ€μμ Robot μΆμλ©μλλ₯Ό ꡬννλ ꡬνν΄λμ€λ₯Ό μμ±ν΄ 보μ.
TaekwonV.java
public class TaekwonV extends Robot{
@Override
void attack() {
System.out.println("νκΆλΈμ΄κ° λ―Έμ¬μΌ 곡격μ ν©λλ€.");
}
@Override
void move() {
System.out.println("νκΆλΈμ΄κ° λΉν λͺ¨λλ‘ μ΄λ ν©λλ€.");
}
@Override
void defend() {
System.out.println("νκΆλΈμ΄κ° λ°©ν¨λ‘ λ°©μ΄ ν©λλ€.");
}
@Override
void transform() {
System.out.println("νκΆλΈμ΄κ° μ ν¬κΈ°λ‘ λ³μ ν©λλ€.");
}
}
Sungard.java
public class Sungard extends Robot{
@Override
void attack() {
System.out.println("μ¬κ°λκ° λ°μ°¨κΈ° 곡격μ ν©λλ€.");
}
@Override
void move() {
System.out.println("μ¬κ°λκ° κ±Έμ΄μ μ΄λν©λλ€.");
}
@Override
void defend() {
System.out.println("μ¬κ°λκ° λ°©ν¨λ‘ λ°©μ΄ν©λλ€.");
}
@Override
void transform() {
System.out.println("μ¬κ°λκ° μλμ°¨λ‘ λ³μ ν©λλ€.");
}
}
Mazinger.java
public class Mazinger extends Robot{
@Override
void attack() {
System.out.println("λ§μ§κ°κ° νμΉ κ³΅κ²©μ ν©λλ€.");
}
@Override
void move() {
System.out.println("λ§μ§κ°κ° λΉν ν©λλ€.");
}
@Override
void defend() {
System.out.println("λ§μ§κ°κ° λ°©ν¨λ‘ λ°©μ΄ν©λλ€.");
}
@Override
void transform() {
System.out.println("λ§μ§κ° λΉνκΈ°λ‘ λ³μ ν©λλ€.");
}
}
μ°λ¦¬λ μ¬κΈ°μ @Overrideμ μ§μ€ν νμκ° μλ€. νκΆλΈμ΄, λ§μ§κ°, μ¬κ°λλ λͺ¨λ λ°λμ νμν κΈ°λ₯ 4κ°μ§μ λν΄μ μ¬μ μλ₯Ό ν΅ν΄ μΆμλ©μλμ λ΄μ©μ μ¬μ μνκ³ μλ€. μ΄ μ€ νλλΌλ μ¬μ μνμ§ μλλ€λ©΄, μλ°λ λ€μκ³Ό κ°μ μλ¬ λ©μΈμ§λ₯Ό λ³΄λΌ κ²μ΄λ€.
java: org.kithub.Mazinger is not abstract and does not override abstract method defend() in org.kithub.Robot
κ·Έλ¦¬κ³ μ°λ¦¬λ μΈ λ‘λ΄μ 4κ°μ§ κΈ°λ₯μ΄ λͺ¨λ λ€λ₯΄λ€λ κ²(곡격:λ―Έμ¬μΌ,νμΉ,λ°μ°¨κΈ°)μ μ μ μλ€. μ¦, μΆμν΄λμ€(λΆλͺ¨ν΄λμ€)λ μμν΄λμ€μκ² νμν κΈ°λ₯ 4κ°μ§λ₯Ό μ μν κ²μΌλΏ μμΈν λ΄μ©μ μ¨μ ν μμν΄λμ€μκ² μμνκ³ μλ€. κ°μ λ‘λ΄μ΄λΌλ λ―Έμ¬μΌ κ³΅κ²©μ΄ κ°λ₯ν μ μκ³ , νμΉ κ³΅κ²©μ΄ κ°λ₯ν μλ μκΈ°λλ¬Έμ΄λ€.
Main.java
public static void main(String[] args) {
List<Robot> robots = List.of(new Mazinger(),new TaekwonV(), new Sungard());
robots.stream().forEach((r)->r.attack());
}
λ§μ§κ°κ° νμΉ κ³΅κ²©μ ν©λλ€.
νκΆλΈμ΄κ° λ―Έμ¬μΌ 곡격μ ν©λλ€.
μ¬κ°λκ° λ°μ°¨κΈ° 곡격μ ν©λλ€.
μ΄μ μΈ λͺ¨λΈμ λ‘λ΄(μΈμ€ν΄μ€)μ λ§λ€μ΄ 곡격 λμμ μνν΄λ³΄μ. λ‘κ·Έμ λμ μλ κ²μ²λΌ λͺ¨λ λ€λ₯Έ 곡격 ν¨ν΄μ μ§λκ³ μμμ μ μ μλ€. μ¬κΈ°μ μ°λ¦¬λ νλλ₯Ό λ μκ² λλ€. κ°μ²΄κ° λ€λ¦μλ List 컬λ μ μ λ€λ₯Έ μΈ νμ μ κ°μ²΄λ₯Ό λͺ¨λ λ°μλ€μ΄κ³ μλ€λ κ²μ΄λ€. μ΄κ²μ΄ λ°λ‘ λΆλͺ¨μ νμ μ κ°μ§λ§ μ€μ μ°Έμ‘°νκ³ μλ μμμ νμ μ΄ λ€λ₯Έ κ²½μ°λ₯Ό μ°λ¦¬λ 'λ€νμ±'μ΄λΌκ³ λΆλ₯Έλ€. μλ°λ μ΄λ¬ν λ€νμ±μ μ§μνκΈ° λλ¬Έμ μΆμν΄λμ€μ κ°μ λ―Έμμ±μ μ€κ³λλ₯Ό ν΅ν΄ μ’ λ μ μ°ν μννΈμ¨μ΄ κ°λ°μ΄ κ°λ₯ν κ²μ΄λ€.
'β Programming > β JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ JAVA ] String ν΄λμ€μ StringBuffer μ StringBuilder ν΄λμ€ μ°¨μ΄βοΈ (2) | 2023.02.21 |
---|---|
[ Jsoup ] μμλλ©΄ μ’μ Jsoup λμ²λ² (1) | 2020.11.30 |
[JAVA] μ°λ λ(Thread)λ (1) | 2019.04.08 |