μμ λ μ§/μ 리λ μ§
2022.03.29/2022.04.03
νμ΅μ£Όμ
- 07 μμ
νμ΅λ΄μ©
07 μμ
μμ(inheritance): κΈ°μ‘΄μ μ‘΄μ¬νλ ν΄λμ€λ‘λΆν° μ½λμ λ°μ΄ν°λ₯Ό μ΄μ΄λ°κ³ μμ μ΄ νμν κΈ°λ₯μ μΆκ°νλ κΈ°λ²
μμμ νμ
μλ°μμμ μμμ ν΄λμ€ μ΄λ¦ λ€μ extendsλ₯Ό μ¨μ£Όκ³ λΆλͺ¨ ν΄λμ€ μ΄λ¦μ μ μ΄μ€λ€.
β» extends: νμ₯(λλ νμ) → λΆλͺ¨ ν΄λμ€λ₯Ό νμ₯νμ¬ μμ ν΄λμ€λ₯Ό μμ±νλ€λ μλ―Έ.
class Childclass extends Parentclass // Childclass: μμorμλΈν΄λμ€, Parentclass: λΆλͺ¨orμνΌν΄λμ€
{
// νλμ λ©μλ μΆκ°
}
무μμ΄ μμμ΄ λλκ°?
- λΆλͺ¨ ν΄λμ€μ νλμ λ©μλκ° μμ ν΄λμ€λ‘ μμλλ€.
- λ°λΌμ μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ νλμ λ©μλλ₯Ό μμ λ‘κ² μ¬μ©ν μ μλ€.
- μμ ν΄λμ€λ μμ λ§μ νλμ λ©μλλ₯Ό μΆκ°ν μ μλ€.
- μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ μ΄λ―Έ μ‘΄μ¬νλ λ©μλλ₯Ό μ¬μ μνμ¬ μ¬μ©ν μ μλ€.
- μμ ν΄λμ€λ νμ λΆλͺ¨ν΄λμ€λ₯Ό ν¬ν¨νκ² λλ€.
- μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ public, protected, package λ©€λ²λ μμλ°μ§λ§, private λ©€λ²λ μμλμ§ μλλ€.
λ©μλ μ€λ²λΌμ΄λ©
- μμ ν΄λμ€κ° λΆλͺ¨ ν΄λμ€μμ μμλ λ©μλλ₯Ό μ¬μ μ(μ€λ²λΌμ΄λ©)νλ€.
- λ©μλμ μ΄λ¦/λ°νν/맀κ°λ³μκ° λͺ¨λ μΌμΉν΄μΌ νλ€.
- μμ ν΄λμ€μμ λ©μλλ₯Ό μ¬μ μνλ©΄, μμ ν΄λμ€μλ λμΌν λ©μλκ° 2κ° μ‘΄μ¬νκ² λλ€. (λΆλͺ¨μ λ©μλ, μμμ λ©μλ)
β» μ€λ²λΌμ΄λ(override): 무μνλ€.
@Override μ΄λ Έν μ΄μ
μ¬μ μλ λ©μλ μ΄λ¦ μμ @Override μ΄λ Έν μ΄μ μ λΆμ΄λ κ²μ΄ μ’λ€. λ§μ½ λΆλͺ¨ ν΄λμ€μ κ·Έλ° μ΄λ¦μ΄ λ©μλκ° μλ€λ©΄ μ»΄νμΌλ¬κ° μ€λ₯λ₯Ό λ°μνλ€.
class Dog extends Animal{
@Override
public void sound(){
System.out.print("λ©λ©");
}
}
sound()κ° μλ saund()λ‘ μμ±νμ κ²½μ°(μ€νλ‘ μΈν΄ λ€λ₯΄κ² μμ±νμ κ²½μ°),
μ»΄νμΌλ¬λ κ³ μ μ λ©μλλ₯Ό μΆκ°ν건μ§, λΆλͺ¨λ‘λΆν° λ°μ κ²μ μ€λ²λΌμ΄λ©ν κ²μΈμ§ μ μ μλ€.
→ @Override μ¬μ©! → λΆλͺ¨μ κ²κ³Ό κ°μ κ²μΈμ§ μ»΄νμΌλ¬κ° νμΈνκ³ μ€λ₯λ‘ μ²λ¦¬νκ² λλ€.
ν€μλ super(parentchild)
- ν€μλ superλ μμ κ΄κ³μμ λΆλͺ¨ ν΄λμ€μ λ©μλλ νλλ₯Ό λͺ μμ μΌλ‘ μ°Έμ‘°νκΈ° μν΄ μ¬μ―λλ€.
- λΆλͺ¨ ν΄λμ€μ λ©μλλ νλλ₯Ό μ€λ²λΌμ΄λν κ²½μ° superλ₯Ό μ¬μ©νλ©΄ λΆλͺ¨ ν΄λμ€μ λ©μλλ νλλ₯Ό νΈμΆν μ μλ€.
μμμμ μμ±μ
μμ κ°μ²΄κ° μμ±λ λ, μμ±μμ νΈμΆ μμ
- λΆλͺ¨μ μμ±μ → μμμ μμ±μ μμΌλ‘ νΈμΆλλ€.
- λΆλͺ¨μ 묡μμ μμ±μ μλ νΈμΆμ΄ κΈ°λ³Έμ΄λ€.
- λΆλͺ¨μ λͺ μμ μμ±μ νΈμΆμ΄ νμν μ, λͺ μμ μΌλ‘ νΈμΆν΄μΌνλ€. (super ν€μλ νμ)
λͺ μμ μΈ λΆλͺ¨ μμ±μ νΈμΆ
class Shape{
public Shape(String msg){
System.out.println("Shape μμ±μ()" + msg);
}
}
public class Rectangle extends Shape{
public Rectangle(){
super("from Rectangle"); // λͺ
μμ μΈ νΈμΆ
System.out.println("Rectangle μμ±μ()");
}
}
묡μμ μΈ λΆλͺ¨ μμ±μ νΈμΆ
class Shape{
public Shape(String msg){
System.out.println("Shape μμ±μ()");
}
}
class Rectangle extends Shape{
public Rectangle(){ // μ€λ₯: 묡μμ Shape()μ΄ μμ
System.out.println("Rectangle μμ±μ()");
}
}
μμ κ²½μ° λ§€κ° λ³μκ° μλ μμ±μλ₯Ό μ μνμ§ μμ μ€λ₯κ° λ°μνλ€.
λΆλͺ¨ ν΄λμ€μμ μμ±μκ° νλλΌλ μ μλμ΄ μμΌλ©΄ κΈ°λ³Έ μμ±μκ° μλ μΆκ°λμ§ μλλ€.
λλ¬Έμ μμ ν΄λμ€μμ λ§€κ° λ³μκ° μλ μμ±μλ₯Ό νΈμΆν μ μμ΄ μ»΄νμΌ μ€λ₯κ° λ°μνλ€.
ν΄κ²°λ²
β λΆλͺ¨ ν΄λμ€μ 묡μμ μμ±μλ₯Ό μ€λ²λ‘λ©νλ€.
β‘ μμ ν΄λμ€μ μμ±μμμ λΆλͺ¨ ν΄λμ€μ λͺ μμ μμ±μλ₯Ό νΈμΆνλ€.
μΆμ ν΄λμ€
- μμ νκ² κ΅¬νλμ΄ μμ§ μμ λ©μλλ₯Ό κ°μ§κ³ μλ ν΄λμ€λ₯Ό μλ―Ένλ€.
- λ©μλκ° λ―Έμμ±λμ΄ μμΌλ―λ‘ μΆμ ν΄λμ€λ‘λ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
- μ£Όλ‘ μμ κ³μΈ΅μμ μΆμμ μΈ κ°λ μ νννκΈ° μν μ©λλ‘ μ¬μ©λλ€.
- μΆμ ν΄λμ€λ₯Ό λ§λ€κΈ° μν΄μ ν΄λμ€ μ μΈ μ μμ μμ½μ΄ abstractλ₯Ό μ¬μ©νλ€.
pubilc abstract class Animal{ // μΆμ ν΄λμ€
public abstract void move(); // μΆμ λ©μλ, body λΆλΆ(ꡬν λΆλΆ)μ΄ μμ
...
}
μμκ³Ό λ€νμ±
- λ€νμ±μ΄λ νλ‘κ·Έλλ° μΈμ΄μμ νλμ μλ³μλ‘ λ€μν νμ (ν΄λμ€)λ₯Ό μ²λ¦¬νλ κ²μ μλ―Ένλ€.
- λμΌν λ©μμ§μ κ°μ²΄λ§λ€ μλ‘ λ€λ₯΄κ² λμνλ€.
- μν₯ νλ³ν, λμ λ°μΈλ© κ°λ μ΄ νμνλ€.
μν₯ νλ³ν
up-casting (μμ κ°μ²΄κ° λΆλͺ¨νμ μΌλ‘ λ³ν)
λΆλͺ¨ ν΄λμ€ν κ°μ²΄ μ°Έμ‘° λ³μλ‘ μμ ν΄λμ€μ κ°μ²΄ μ°Έμ‘°κ° κ°λ₯νλ€.
class A{}
class B extends A{} // Bλ Aλ‘λΆν° μμλ°μ μμ±λ¨
public class TypeTest{
public static void main(String args[]){
A a = new B(); // λΆλͺ¨ ν΄λμ€μ μ°Έμ‘° λ³μλ‘ μμ ν΄λμ€μ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ€.
}
}
κ΅μ¬ 339μͺ½ μμ
... // Shape ν΄λμ€(λΆλͺ¨)μ Rectangle ν΄λμ€(μμ) μλ΅. widthμ heightλ Rectangleν΄λμ€μ λ³μ
public class ShapeTest{
public static void main(String args[]){
Shape s = new Rectangle();
s.x = 0;
s.y = 0;
s.width = 100; // μ»΄νμΌ μ€λ₯
s.height = 100; // μ»΄νμΌ μ€λ₯
}
}
5~6μ€: Shape ν΄λμ€(λΆλͺ¨)μ νλμ λ©μλμ μ κ·Όνλ κ²μ κ°λ₯νλ€.
7~8μ€: sλ₯Ό ν΅ν΄μλ Rectangle ν΄λμ€(μμ)μ νλμ λ©μλμ μ κ·Όν μ μλ€. → μ»΄νμΌ μ€λ₯
νν₯ νλ³ν
Shape s = new Rectangle); // μν₯νλ³νμΌλ‘ κ°μ²΄λ₯Ό μ°Έμ‘°νλ κ²½μ°μ νν΄ νν₯ νλ³ν κ°λ₯!
((Rectangle)s).setWidth(100); // νν₯ νλ³ν
λμ λ°μΈλ©
- λ©μλ νΈμΆμ μ€μ λ©μλμ λͺΈμ²΄μ μ°κ²°νλ κ²μ λ§νλ€.
- JVMμ μ€ν λ¨κ³μμ μ μ ν λ©μλλ₯Ό νΈμΆνλ€.
β» JVM: κ°κ°μ μ΄μ체μ μ λ€μ΄μλ κ°μλ¨Έμ . (μλ°μμ λμ λ°μΈλ©μ΄ μμμ μ΄λ£¨μ΄μ§λ€.)
λ©μλμ λ§€κ° λ³μ
- λ©μλμ λ§€κ° λ³μλ‘ λΆλͺ¨ ν΄λμ€ μ°Έμ‘° λ³μλ₯Ό μ΄μ©νλ€. → λ€νμ±μ μ΄μ©νλ μ νμ μΈ λ°©λ²
Object ν΄λμ€
- Object ν΄λμ€λ₯Ό μ μΈνκ³ λͺ¨λ ν΄λμ€λ λΆλͺ¨ ν΄λμ€λ₯Ό κ°μ§κ³ μλ€.
- Object ν΄λμ€λ java.lang ν¨ν€μ§ μμμ΄λ€. → λͺ¨λ ν΄λμ€μ 곡ν΅μ μΈ λ©μλλ₯Ό ꡬννλ€.
- ν΄λμ€ κ³μΈ΅ ꡬ쑰μ μ΅μμ ν΄λμ€μ΄λ€.
Objectμ λ©μλ
λ©μλ | μ€λͺ |
Object clone() | κ°μ²΄ μμ μ 볡μ¬λ³Έμ μμ±νμ¬ λ°ν |
boolean equals(Object obj) | objκ° νμ¬ κ°μ²΄μ κ°μμ§λ₯Ό λ°ν |
void finalize() | μ¬μ©λμ§ μλ κ°μ²΄κ° μ κ±°λκΈ° μ§μ μ νΈμΆ(μλ©Έμ) |
class getclass() | μ€ν μκ°μ κ°μ²΄μ ν΄λμ€ μ 보λ₯Ό λ°ν |
int hashCode() | κ°μ²΄μ λν ν΄μ¬ μ½λλ₯Ό λ°ν |
String toString() | κ°μ²΄λ₯Ό κΈ°μ νλ λ¬Έμμ΄μ λ°ν |
μ΄ μ€ λ§μ΄ μ¬μ©λλ λ©μλλ₯Ό μ΄ν΄λ³΄μ
getclass() λ©μλ
- κ°μ²΄κ° μ΄λ€ ν΄λμ€λ‘ μμ±λμλμ§μ λν μ 보λ₯Ό λ°ννλ€.
equals() λ©μλ
- == μ°μ°μλ₯Ό μ¬μ©νμ¬ κ°μ²΄μ μ£Όμκ° λμΌνμ§ κ²μ¬νμ¬ trueλ flaseλ₯Ό λ°ννλ€. (κ°μ²΄ μ°Έμ‘°κ° λμΌνμ§ κ²μ¬)
- Stirngμ Objectμ equalsλ₯Ό μ¬μ μ νμ¬ λ¬Έμμ΄μ λΉκ΅νλ€. (λ¬Έμμ΄μ΄ κ°μΌλ©΄ κ°μ κ°μ²΄λ‘ λ³Έλ€.)
toString() λ©μλ
- κ°μ²΄κ° κ°μ§ μ 보λ₯Ό νμ€μ λ¬Έμμ΄λ‘ λ§λ€μ΄μ λ°ννλ€.
μ’ λ¨ (final) ν΄λμ€/λ©μλ
μ’ λ¨ ν΄λμ€
- μμμ μν¬ μ μλ ν΄λμ€
- 보μμμ μ΄μ λλ¬Έ
public final class MyFinal{...}
public class ThisIsWrong extends MyFinal{...} // λΆκ°
μ’ λ¨ λ©μλ
- νΉμ ν λ©μλλ§ μ€λ²λΌμ΄λ λ μ μκ² λ§γ·λ λ©μλ
class Baduk{
enum BadukPlayer{WHITE, BLACK};
...
final BadukPlayer getFirstPlayer(){ // μμ ν΄λμ€μμ μ¬μ μν μ μλλ‘ finalλ‘ μ§μ
return BadukPlayer.BLACK;
}
}
νμ΅λ΄μ© μ΄ν΄λ
90%μ λ. μμ λ₯Ό μ’ λ κΌΌκΌΌν μ΄ν΄λ³΄λ©° μ΄ν΄ν΄μΌκ² λ€.
νμ΅νλ λμ보기
C++νλ‘κ·Έλλ° λ λ°°μ΄ κ°λ μ λΉμ·ν΄μ μ΄ν΄νλλ° ν° μ΄λ €μμ μμλ€. λ΄μ© μ 리λ₯Ό νλ©° μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ λν κ°λ μ΄ μ λλ‘ μ‘νμ§ μμ μνλΌλ κ²μ μ μ μμλ€. μ΄ λμ λν΄ μ°Ύμ보λ μ€λ²λ‘λ©μ κ°μ μ΄λ¦μ λ©μλλ₯Ό μ¬λ¬κ° κ°μ§λ©΄μ 맀κ°λ³μμ μ νκ³Ό κ°μλ₯Ό λ€λ₯΄κ² νλ κ². μ€λ²λΌμ΄λ©μ μμ ν΄λμ€κ° κ°μ§κ³ μλ λ©μλλ₯Ό νμ ν΄λμ€κ° μ¬μ μ νλ κ²μ΄λΌκ³ νλ€.
λ€μ νμ΅κ³ν
μλ° GUIμ μ΄ν΄1
'Study > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ°νλ‘κ·Έλλ° 6μ£Όμ°¨ μ 리 (0) | 2022.04.16 |
---|---|
μλ°νλ‘κ·Έλλ° 5μ£Όμ°¨ μ 리 (0) | 2022.04.09 |
μλ° κ³΅λΆ μ€ κΆκΈν μ (0) | 2022.04.03 |
μλ°νλ‘κ·Έλλ° 3μ£Όμ°¨ μ 리 (0) | 2022.03.27 |
μλ°νλ‘κ·Έλλ° 2μ£Όμ°¨ μ 리 (0) | 2022.03.20 |