
π‘μμ(Inheritance)
1. μμμ κ°λ λ° μ¬μ©
- OOP νΉμ§ μ€ νλμ΄λ©°, κΈ°μ‘΄μ ν΄λμ€μ μΆκ°νκ±°λ μ¬μ μνμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μ μνλ κ²μ μλ―Ένλ€.
- μμ ν΄λμ€κ° λΆλͺ¨ ν΄λμ€λ₯Ό μμλ°μΌλ©΄ λΆλͺ¨ ν΄λμ€μ νλμ λ©μλλ€μ λͺ¨λ μ¬μ©ν μ μλ€. νμ€ μΈκ³μ λΉμ νμλ©΄ 'λΆλͺ¨μ μ μ μ λλ μ¬μ°μ μμμ΄ μμλ°μ μ¬μ©νλ€'.λΌκ³ μκ°ν΄λ©΄ μ½κ² μ΄ν΄ν μ μλ€.
- λΆλͺ¨ν΄λμ€(Parent Class)λ μμ ν΄λμ€(Super Class), κΈ°λ³Έ ν΄λμ€(Base Class)λΌκ³ λ λΆλ¦°λ€.
- μμν΄λμ€(Child Class)λ νμ ν΄λμ€(Sub Class), νμ ν΄λμ€(Derived Class)λΌκ³ λ λΆλ¦°λ€.
- μμμ λΆλͺ¨μ λͺ¨λ λ©€λ²(λ³μ, λ©μλ)λ₯Ό μμλ°λλ€. (λ¨, privateλ μ μΈ)
- ν΄λμ€ μμμ μν΄μλ extends ν€μλ μ¬μ©νλ€.
class Person {
String name;
void setName(String name) {
this.name = name;
}
}
class Student extends Person{
void print() {
System.out.println("λμ μ΄λ¦μ " + this.name + "μ
λλ€.");
}
}
public class Test {
public static void main(String[] args) {
Student st = new Student();
st.setName("νκΈΈλ");
st.print(); // output: λμ μ΄λ¦μ νκΈΈλ μ
λλ€
}
}
2. μμμ μ₯μ
- κΈ°μ‘΄μ μμ±λ ν΄λμ€λ₯Ό μ¬μ¬μ©ν μ μλ€.
- μ½λμ μ€λ³΅μ μ€μΌ μ μλ€.
- ν΄λμ€ κ°μ κ³μΈ΅μ κ΄κ³λ₯Ό ꡬμ±ν¨μΌλ‘μ¨ λ¬Έλ²μ ν λλ₯Ό λ§λ ¨νλ€.
- μ λ’°μ± μλ μννΈμ¨μ΄λ₯Ό μμ½κ² κ°λ°, μ μ§λ³΄μν μ μλ€.
3. λ¨μΌ μμ vs λ€μ€ μμ
λ€λ₯Έ μΈμ΄μμλ λ€μ€ μμμ΄ κ°λ₯ν μΈμ΄λ€λ μμ§λ§ κΈ°λ³Έμ μΌλ‘ μλ°λ λ¨μΌ μμλ§ κ°λ₯νλ€. μ¦, λ€μ€ μμμ΄ λΆκ°λ₯νλ€. λ°λΌμ extendsν€μλλ₯Ό μ¬μ©ν λ ν κ°μ λΆλͺ¨ ν΄λμ€λ§ μ‘΄μ¬ν μ μλ€. νμ§λ§ μ½λ©μ νλ€ λ³΄λ©΄ λ€μ€ μμμ΄ νμν λλ μλ€. μ΄λ΄ κ²½μ° implementsν€μλλ₯Ό μ¬μ©νμ¬ λ€μ€ μμμ ꡬνν μ μλ€.
4. IS-A κ΄κ³ vs Has-A κ΄κ³
μμκ΄κ³κ° μλ ν΄λμ€λ€μ μμ ν΄λμ€ is-a λΆλͺ¨ ν΄λμ€ κ΄κ³λ‘ μ μλ μ μλ€. μλ₯Ό λ€μ΄ Student is a Person νμμ μ¬λμ΄λ€λΌλ λ§κ³Ό κ°μ΄ λ§ν μ μλ κ΄κ³λ₯Ό IS-Aκ΄κ³λΌκ³ νλ€.
κ·Έμ λ°λλ‘ Has-Aκ΄κ³λ ν¬ν¨κ΄κ³λ₯Ό λ»νλ©°, ν ν΄λμ€μ λ©€λ²λ‘ λ€λ₯Έ ν΄λμ€λ₯Ό μ μΈν΄μ λΆνμ²λΌ 쑰립νμ¬ μ¬μ©νλ κ±Έ λ§νλ€. μ¦ κ°μ±ν μ°Έμ‘° λ³μλ‘ μ¬μ©λλ€.
5. Superμ Super()
thisμ this()μ²λΌ μμ κ΄κ³μμλ superμ super()κ° μ‘΄μ¬νλ€.
super ν€μλλ λΆλͺ¨ ν΄λμ€λ‘λΆν° μμλ°μ νλλ λ©μλλ₯Ό μμ ν΄λμ€μμ μ°Έμ‘°νλ λ° μ¬μ©νλ μ°Έμ‘° λ³μμ΄λ€. μ¦, superν€μλλ₯Ό μ¬μ©νλ©΄ λΆλͺ¨ ν΄λμ€μ λ©€λ²λ₯Ό μ¬μ©ν μ μλ€.
class Person {
String name;
int age;
void setName(String name) {
this.name = name;
}
void setAge(int age) {
this.age = age;
}
}
class Student extends Person{
void print() {
System.out.println("λμ μ΄λ¦μ " + super.name + "μ΄κ³ , λμ΄λ " + super.age + "μ΄ μ
λλ€.");
}
}
public class Test {
public static void main(String[] args) {
Student st = new Student();
st.setName("νκΈΈλ");
st.setAge(20);
st.print(); // output: λμ μ΄λ¦μ νκΈΈλμ΄κ³ , λμ΄λ 20μ΄μ
λλ€.
}
}
super()λ λΆλͺ¨ ν΄λμ€μ μμ±μλ₯Ό νΈμΆν κ²½μ° μ¬μ©λλ€. μ§μ μμ±νμ§ μμλ μλ°λ μ»΄νμΌμ ν΄λΉ ν€μλλ₯Ό μλμΌλ‘ μΆκ°ν΄ μ€λ€. νμ§λ§ λΆλͺ¨ν΄λμ€μ κΈ°λ³Έμμ±μκ° μκ³ , λ§€κ°λ³μκ° μλ μμ±μλ₯Ό μμ±νλ©΄ μλμΌλ‘ μ μ©λμ§ μμΌλ©°, μ΄ λ μμ ν΄λμ€μ μμ±μκ° λΆλͺ¨ν΄λμ€λ₯Ό νΈμΆνλ©΄ μ€λ₯κ° λλ€. κ·Έλ κΈ° λλ¬Έμ κΈ°λ³Έ μμ±μλ λͺ μμ μΌλ‘ μμ±ν΄μ£Όλ κ²μ΄ μ’λ€.
μμ ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νλ©΄ μμμ λ©€λ²μ λΆλͺ¨μ λ©€λ²κ° ν©μ³μ§ νλμ κ°μ²΄κ° μμ±λλ©°. μλμ κ°μ μμλ‘ μ§νλλ€.
1. λΆλͺ¨ν΄λμ€μ κ°μ²΄ μμ±
2. λΆλͺ¨ν΄λμ€μ μμ±μ νΈμΆ
3. μμ ν΄λμ€μ κ°μ²΄ μμ±
4. μμν΄λμ€μ μμ±μ νΈμΆ
class Person {
//λΆλͺ¨ κΈ°λ³Έμμ±μ
public Person() {
System.out.println("λλ λΆλͺ¨ν΄λμ€ κΈ°λ³Έμμ±μ μ
λλ€.");
}
}
class Student extends Person{
//μμ κΈ°λ³Έμμ±μ
public Student() {
super();
System.out.println("λλ μμν΄λμ€ κΈ°λ³Έμμ±μ μ
λλ€.");
}
}
public class Test {
public static void main(String[] args) {
Student st = new Student();
//μΆλ ₯κ²°κ³Ό
//λλ λΆλͺ¨ν΄λμ€ κΈ°λ³Έμμ±μ μ
λλ€.
//λλ μμν΄λμ€ κΈ°λ³Έμμ±μ μ
λλ€.
}
}
6. λ©μλ μ€λ² λΌμ΄λ©
λ©μλ μ€λ² λΌμ΄λ©μ λΆλͺ¨ ν΄λμ€μμ μμλ°μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μ νλ κ±Έ λ§νλ©° λ©μλλͺ , λ§€κ°λ³μ νμ , κ°μ, μμκ° λμΌν΄μΌ νλ€. (λ¨, privateλ μ μΈ)
μμν΄λμ€ κ°μ²΄λ₯Ό μ μΈν ν μ€λ² λΌμ΄λ© ν print() λ©μλλ₯Ό νΈμΆνλ©΄ μ¬μ μν μμμ λ©μλ print()κ° μΆλ ₯λλ€. λ§μ½ μ¬μ μ νμ§ μμλ€λ©΄ λΆλͺ¨μ print() λ©μλκ° νΈμΆλμμ κ²μ΄λ€.
class Person {
void print() {
System.out.println("λ λΆλͺ¨μΌ");
}
}
class Student extends Person{
@Override
void print() {
System.out.println("λ μμμ΄μΌ");
}
}
public class Test {
public static void main(String[] args) {
Student st = new Student();
st.print(); // μΆλ ₯=> λ μμμ΄μΌ
}
}
7. Object Class (μ€λΈμ νΈ ν΄λμ€)
μλ°μ λͺ¨λ ν΄λμ€λ μ΅μμ ν΄λμ€μΈ Objectν΄λμ€λ₯Ό μμλ°λλ€.
μ¦, μλ°μ λͺ¨λ ν΄λμ€λ λ³λλ‘ extends ν€μλλ₯Ό μ¬μ©νμ§ μμλ Objectμ ν΄λμ€μ λͺ¨λ λ©€λ²λ₯Ό μ¬μ©ν μ μλ€. μλ°μ λͺ¨λ κ°μ²΄μμ toString()μ΄λ clone()κ³Ό κ°μ λ©μλλ₯Ό λ°λ‘ μ¬μ©ν μ μλ μ΄μ κ° ν΄λΉ λ©μλλ€μ΄ Objcet ν΄λμ€μ λ©μλμ΄κΈ° λλ¬Έμ΄λ€.
πReference
http://www.tcpschool.com/java/java_inheritance_concept
ν΄λΉ κΈμ νμ΅ν λ΄μ©μ κ°μΈμ μΌλ‘ μ 리ν κΈμ λλ€. λ§μ½ νλ¦° λΆλΆμ΄ μλ€λ©΄ λκΈλ‘ λ¨κ²¨μ£ΌμΈμ:D