[Java] μμ(Inheritance)μ λν΄
by rlaehddnd0422μλ°μλ μμμ΄λ κ°λ μ΄ μ‘΄μ¬ν©λλ€.
μμμ΄λ?
μμμ μ½κ² λ§ν΄ λΆλͺ¨ ν΄λμ€μ μμ ν΄λμ€κ° μμ λ, μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€λ₯Ό μ νν΄μ κ·Έ λΆλͺ¨μ λ©€λ²λ₯Ό λ¬Όλ €λ°μ κ·Έλλ‘ μ¬μ©νλ κ²μ λ§ν©λλ€.
β» μ¬κΈ°μ λ§νλ λ©€λ²λ μΈμ€ν΄μ€ λ³μμ, μΈμ€ν΄μ€ λ©μλλ₯Ό λ§ν©λλ€.
λ€λ§, μ£Όμν΄μΌ ν μ .
1. μ κ·Ό μ μ΄μκ° privateμΈ κ²½μ°μλ μμ ν΄λμ€μμ μμμ΄ λΆκ°λ₯ ν©λλ€.
public class Parent {
private int a = 1;
public int b = 2;
private void printA() {
System.out.println(a);
}
public void printB() {
System.out.println(b);
}
}
- Parent ν΄λμ€λ aμ bμ μΈμ€ν΄μ€ λ³μλ₯Ό κ°μ΅λλ€. μ΄ λ aλ μ κ·Όμ μ΄μκ° privateμ΄κΈ° λλ¬Έμ, μΆν νμ ν΄λμ€μμ μ΄ ν΄λμ€λ₯Ό μμλ°λλΌλ aμ λν΄ μ κ·Όν μλ μμ΅λλ€.
- λ§μ°¬κ°μ§λ‘ νμ ν΄λμ€μμ printA()μ printB()μ μΈμ€ν΄μ€ λ©μλλ₯Ό κ°λ Parent ν΄λμ€μ λν΄ μμλ°μ λ, printB()μ λν μμμ κ°λ₯νμ§λ§, μ κ·Όμ μ΄μκ° privateμΈ printA() μΈμ€ν΄μ€ λ©μλμ λν μμμ μ΄λ£¨μ΄μ§μ§ μμ΅λλ€.
public class Child extends Parent{
public int c = 3;
public void printC() {
System.out.println("c = " + c);
}
}
public class ChildTest {
public static void main(String[] args) {
Child c = new Child();
c.printA(); // ERROR, λΆλͺ¨ ν΄λμ€μ printA()λ privateμ΄λ―λ‘ μμλμ§ μμ
c.printB();
c.printC();
}
}
2. λΆλͺ¨μ μμ ν΄λμ€κ° μλ‘ λ€λ₯Έ ν¨ν€μ§μ μλ κ²½μ°μλ λΆλͺ¨ ν΄λμ€μ λ©€λ²κ° default μ κ·Ό μ μ΄μλ₯Ό κ°λ κ²½μ°μλ μμμ΄ λΆκ°λ₯
λ°λλ‘ λ§νλ©΄ μ/νμ ν΄λμ€κ° μλ‘ κ°μ ν¨ν€μ§μ μλ κ²½μ°, default μ κ·Ό μ μ΄μλ₯Ό κ°λ λ©€λ²μ λν μμμ μ΄λ£¨μ΄μ§λ€.
public class ParentBook {
String title;
String genre;
public void print() {
System.out.println("TITLE : " + title);
System.out.println("GENRE : " + genre);
}
}
ParentBook ν΄λμ€λ titleκ³Ό genreλΌλ default μ κ·Ό μ μ΄μμ μΈμ€ν΄μ€ λ³μλ₯Ό κ°μ΅λλ€. κ·Έλ¦¬κ³ μΈμ€ν΄μ€ λ³μλ₯Ό μΆλ ₯νλ μμ κ°λ₯ν publicμ μΈμ€ν΄μ€ λ©μλ print()λ₯Ό κ°μ΅λλ€.
- μ κ·Όμ μ΄μλ μλ΅κ°λ₯νλ©° μλ΅νμ λλ μλμΌλ‘ default μμ λ»νκ² λ©λλ€. λ°λΌμ default μΌκ²½μ°μλ μ κ·Όμ μ΄μλ₯Ό μ§μ νμ§ μμ΅λλ€.
public class ChildBook extends ParentBook{
ChildBook(String title, String genre) {
this.title = title;
this.genre = genre;
}
}
ChildBookμμλ ParentBookμ μμλ°μμ΅λλ€.
μμλ λ©€λ²λ‘λ μΈμ€ν΄μ€ λ³μμλ title, genre, μΈμ€ν΄μ€ λ©μλμλ print()λ₯Ό μμ λ°μμ΅λλ€. λΆλͺ¨ ν΄λμ€λ‘λΆν° titleκ³Ό genreμ λν λ©€λ² λ³μλ₯Ό μμλ°μκΈ° λλ¬Έμ, μμ±μμμ this.titleκ³Ό this.genreμ λν μ»΄νμΌ μλ¬κ° λμ§ μλ κ²μ λλ€.
public class ChildBookTest {
public static void main(String[] args) {
ChildBook c = new ChildBook("λ
ΈμΈκ³Ό λ°λ€", "μμ€");
c.print();
}
}
ChildBook μΈμ€ν΄μ€λ₯Ό νλ λ§λ€μ΄ print() λ©μλλ₯Ό μ€νν΄λ³΄λ©΄ λ€μκ³Ό κ°μ μΆλ ₯κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€.
c.print()κ° κ°λ₯ν μ΄μ λ λΆλͺ¨ ν΄λμ€λ‘λΆν° print() λ©μλλ₯Ό μμλ°μκΈ° λλ¬Έμ κ·Έλλ‘ μ¬μ©μ΄ κ°λ₯νλ°, λ¨μνκ² μμ ν΄λμ€μμλ μμλ°μ λΆλͺ¨μ λ©€λ²λ₯Ό κ·Έλλ‘ λ¬Όλ €λ°μ μ¬μ©ν μ μλ€κ³ μκ°νμλ©΄ λ©λλ€.
μ΄ λ λΆλͺ¨μ λ©€λ²λ₯Ό κ·Έλλ‘ μ¬μ©νμ§ μκ³ μμ ν΄λμ€μμ ν΄λΉ λ©μλλ₯Ό μ¬μ μνμ¬ μ¬μ©νκ³ μΆμ κ²½μ°, λ€μκ³Ό κ°μ΄ λΆλͺ¨ν΄λμ€μ λ©μλλ₯Ό μ€λ²λΌμ΄λ© νμ¬ μμ ν΄λμ€μμ κΈ°λ₯μ μ¬μ μν μ μμ΅λλ€.
public class ChildBook extends ParentBook{
public String writer;
ChildBook(String title, String genre, String writer) {
this.title = title;
this.genre = genre;
this.writer = writer;
}
@Override
public void print() {
System.out.println("TITLE IS " + title + " AND GENRE IS" + genre);
System.out.println("Written By " + writer);
}
}
public class ChildBookTest {
public static void main(String[] args) {
ChildBook c = new ChildBook("λ
ΈμΈκ³Ό λ°λ€", "μμ€", "ν΄λ°μ¨μ΄");
c.print();
}
}
λΆλͺ¨ ν΄λμ€ νΈμΆ : super(맀κ°λ³μ 리μ€νΈ);
μ¬μ€ μλ°μμλ μμ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄, λΆλͺ¨ μΈμ€ν΄μ€λ₯Ό λ¨Όμ μμ±ν ν, μμ μΈμ€ν΄μ€κ° κ·Έ λ€μμ μμ±λ©λλ€.
μ΄ λ λΆλͺ¨ ν΄λμ€μ λͺ μμ μΈ μμ±μκ° μλ κ²½μ°, μ»΄νμΌλ¬λ μμμ κΈ°λ³Έ μμ±μ(super();)λ₯Ό νΈμΆν©λλ€.
public class ParentBook {
String title;
String genre;
// ParentBook(){} μλμΌλ‘ νΈμΆ
public void print() {
System.out.println("TITLE : " + title);
System.out.println("GENRE : " + genre);
}
}
public class ChildBook extends ParentBook{
public String writer;
ChildBook(String title, String genre, String writer) {
super();
this.title = title;
this.genre = genre;
this.writer = writer;
}
@Override
public void print() {
System.out.println("TITLE IS " + title + " AND GENRE IS" + genre);
System.out.println("Written By " + writer);
}
λΆλͺ¨ ν΄λμ€λ λͺ μμ μΈ μμ±μκ° μκ³ , μμ ν΄λμ€μ λͺ μμ μΈ μμ±μκ° μ‘΄μ¬ν λ μμ ν΄λμ€μ μμ±μ μ μΈ λ΄λΆμ 맨 첫μ€μ super(); λΌκ³ μμ±λ©λλ€. (μ΄μ κ°μ κ²½μ° μμ±νμ§ μμλ μμμ μμ±νλ―λ‘ μλ΅ν΄λ OK)
νμ§λ§ λ§μ½ λΆλͺ¨ ν΄λμ€μ λͺ μμ μΈ μμ±μκ° μ‘΄μ¬νλ κ²½μ°, λ°λμ μμ ν΄λμ€μμλ super(맀κ°λ³μ 1, 맀κ°λ³μ 2 ...);μ νΈμΆμ ν΅ν΄ λΆλͺ¨ ν΄λμ€μ λͺ μμ μμ±μλ₯Ό μ§μ νΈμΆν΄μ£Όμ΄μΌ ν©λλ€.
public class ParentBook {
String title;
String genre;
ParentBook(String title, String genre) {
this.title = title;
this.genre = genre;
}
public void print() {
System.out.println("TITLE : " + title);
System.out.println("GENRE : " + genre);
}
}
- λΆλͺ¨ ν΄λμ€μ λͺ μμ μμ±μκ° μ‘΄μ¬
public class ChildBook extends ParentBook{
private String writer;
ChildBook(String title, String genre, String writer) {
super(title, genre);
// this.title = title;
// this.genre = genre;
this.writer = writer;
}
}
- μμ ν΄λμ€μμλ λΆλͺ¨ ν΄λμ€μ λͺ μλ μμ±μλ₯Ό super(맀κ°λ³μ 리μ€νΈ)λ₯Ό λ°λμ 첫 μ€μ μ§μ νΈμΆν΄ μ£Όμ΄μΌ ν©λλ€. (κ·Έλ μ§ μμΌλ©΄ μ»΄νμΌ μλ¬ λ°μ)
- μ΄ λ λΆλͺ¨ ν΄λμ€ μμ±μλ₯Ό νΈμΆνμ¬ λ©€λ² λ³μκ°μ΄ ν λΉλμμΌλ―λ‘ λ³λλ‘ this νΈμΆνμ¬ κ°μ λ ν λΉν΄μ€ νμκ° X
<μ°Έκ³ μλ£>
'π Backend > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μΈν°νμ΄μ€μ μ©λ(usage)μ λν΄ (0) | 2023.10.02 |
---|---|
[Java] λ€νμ±(Polymorphism)μ λν΄ (0) | 2023.09.27 |
[Java] String Constant poolκ³Ό Heap μμμ λν΄ (0) | 2023.09.26 |
[Java] μΆμ ν΄λμ€(abstract class)μ λν΄ (2) | 2023.09.26 |
[Java] μ κ·Ό μ μ΄μ(public, protected, default, private)μ λν΄ (0) | 2023.09.25 |
λΈλ‘κ·Έμ μ 보
Study Repository
rlaehddnd0422