๐ ์ฐธ๊ณ ํ ์ฑ
- ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ์ ๋ฆฌํ๊ณ ์ถ๊ฐ์ ์ผ๋ก ๊ถ๊ธํ ๊ฒ๋ค์ ์ ๋ฆฌํ์ต๋๋ค -
๐ฅ ๐ฅ ๐ฅ
โ๏ธ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ_ 329p
• ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
: ๋ถ๋ชจ ํด๋์ค์๊ฒ ์์๋ฐ์ ๋ฉ์๋์ ๋์ผํ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ์ผ๋ก, ๋ถ๋ชจ์ ๋ฉ์๋๋ฅผ ์์ ์ด ๋ง๋ ๋ฉ์๋๋ก ๋ฎ์ด์ฐ๋ ๊ฐ๋
class A {
void print() {
System.out.println("A ํด๋์ค")
}
}
class B extends A {
@Override
void print() {
System.out.println("B ํด๋์ค")
}
}
public class MethodOverrideing_1 {
public static void main(String[] args) {
A aa = new A();
aa.print();
B bb = new B();
bb.print();
A ab = new B();
ab.print();
}
}
๋จผ์ A aa = new A( );์์ ์ผ์ด๋๋ ์ผ์ ์ดํด๋ณด๋ฉด ํ ๋ฉ๋ชจ๋ฆฌ์ A( ) ์์ฑ์๋ก ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ , ์ด๋ฅผ A ํ์ ์ผ๋ก ์ ์ธํ ์ฐธ์กฐ ๋ณ์ aa๊ฐ ์ด ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ A ๊ฐ์ฒด ๋ด๋ถ์๋ ์ค์ ๋ฉ์๋์ ์์น ์ ๋ณด๋ง ์ ์ฅ๋์ด์๊ณ , ์ค์ print( )๋ ๋ฉ์๋ ์์ญ์ ์ ์๋์ด ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ๋ ๋น์ฐํ๊ฒ "A ํด๋์ค"๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
B bb = new B( );๋ ์ฒ์์ A ๊ฐ์ฒด ๋ด์ print( )๊ฐ ๋ฉ์๋ ์์ญ์ ์์ฑ๋๊ณ ๊ทธ ํ B ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค. ๊ทธ๋ฌ๋ฉด A๊ฐ์ฒด์ ์ค์ print( )๋ ๋ฉ์๋ ์์ญ์ ์ ์ฅ๋๊ณ ๊ทธ ํ B ๊ฐ์ฒด์ print( ) ๋ฉ์๋๋ ๊ฐ์ print( ) ์์ญ์ ์ ์ฅ๋๋ค. ์ฆ ํ์ ์๊ธด B์ print( ) ๋ฉ์๋๊ฐ ๋จผ์ ์๊ธด A์ print( ) ๋ฉ์๋๋ฅผ ๋ฎ์ด์ฐ๊ธฐ, ์ค๋ฒ๋ผ์ด๋ฉํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋์ bb.print( )๋ฅผ ํ๊ฒ ๋๋ฉด "B ํด๋์ค"๊ฐ ์ถ๋ ฅ๋๋ค.
A ab = new B( )์ธ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์. ์ฒ์ ์์ฑ๋๋ ๊ณผ์ ์ B bb = new B( );์ ๊ฐ๋ค. ์ฌ๊ธฐ์ ๋ค๋ฅธ ์ ์ A ํ์ ์ ์ฐธ์กฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ์ฐธ์กฐ ๋ณ์๊ฐ A ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ab.print( )๋ ์ค์ A ๊ฐ์ฒด์ print( ) ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ๋๋๋ฐ, A ๊ฐ์ฒด๊ฐ ๊ฐ๋ฆฌํค๋ print( ) ๋ฉ์๋๋ ์ด๋ฏธ B ๊ฐ์ฒด๋ก ์ค๋ฒ๋ผ์ด๋ฉ ๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก ๊ฒฐ๋ก ์ ์ผ๋ก ์ถ๋ ฅ๋๋ ๊ฐ์ "B ํด๋์ค"๊ฐ ๋๋ ๊ฒ์ด๋ค.
์ด๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ฎ์ด์ฐ๊ธฐ๋ ์๋๋ค. ๋ฎ์ด์ฐ๋ ๊ฒ์ ์ด์ ์ ์๋ ๊ฒ์ ์ญ์ ํ๊ณ ์๋ก์ด ํ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ค๋ฒ๋ผ์ด๋ฉ์ ์๋ ์๋ ๊ฒ์ ์๋ก์ด ๋ฉ์๋๊ฐ ์ฌ๋ผ ํ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ฉด ๋๋ค.
• ๋ถ๋ชจ ํด๋์ค ํ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ ๊ฒฝ์ฐ
class Animal {
void cry() {
}
}
class Bird extends Animal {
void cry() {
System.out.println("์งน์งน")
}
}
class Cat extends Animal {
void cry() {
System.out.println("๋์น")
}
}
class Dog extends Animal {
void cry() {
System.out.println("๋ฉ๋ฉ")
}
}
public class MethodOverrideing_1 {
public static void main(String[] args) {
Animal bb = new Bird();
Animal cc = new Cat();
Animal dd = new Dog();
bb.cry();
cc.cry();
dd.cry();
}
}
์ฐธ์กฐ ๋ณ์๋ ๋ชจ๋ Animal ํ์ ์ด์ง๋ง, ๊ฐ๊ฐ ์๋ก ๋ค๋ฅธ ๋ฉ์๋๋ก ์ค๋ฒ๋ผ์ด๋ฉ ๋์ผ๋ฏ๋ก cry( ) ๋ฉ์๋๋ ์๋ก ๋ค๋ฅธ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ธ๋ค. ์ฌ๊ธฐ์ Animal ํด๋์ค ๋ด๋ถ์ ์๋ฌด๋ฐ ๊ธฐ๋ฅ๋ ์ํํ์ง ์๋ cry( ) ๋ฉ์๋๊ฐ ์๊ธฐ์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋ณด์ผ ์ ์๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ๋คํ์ ํํ์ผ๋ก ์์ ํด๋์ค๋ค์ ๊ฐ์ฒด๋ฅผ ๋ถ๋ชจ ํด๋์ค์ธ Animal ํ์ ์ผ๋ก ์ ์ธํ ์ ์์ง๋ง, ๋ง์ผ ๋ถ๋ชจ ํด๋์ค์ cry( ) ๋ฉ์๋๊ฐ ์๋ค๋ฉด ๋ค๋ฅธ ์์ ํด๋์ค๋ cry( ) ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
• ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ
: ์ด๋ฆ์ ๋์ผํ์ง๋ง, ์๊ทธ๋์ฒ๊ฐ ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ ๊ณต๊ฐ์ ์ ์ํ๋ ๊ฒ.
Q. ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ์ ์ฐจ์ด์ ์?
A. ์ค๋ฒ๋ผ์ด๋ฉ์ ์๊ทธ๋์ฒ๊น์ง ์๋ฒฝํ๊ฒ ๋์ผํ ํ์ผ์ ๊ฐ์ ๊ณต๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ์ผ๋ก ์ดํดํ๋ฉด ๋๊ณ , ์ค๋ฒ๋ก๋ฉ์ ์๊ทธ๋์ฒ๋ ๋ค๋ฅด์ง๋ง ์ผ๋ฆ๋ง ๋์ผํ ํ์ผ์ ๊ฐ์ ๊ณต๊ฐ์ ๋ณต์ฌํ ๊ฒ์ผ๋ก ์ดํดํ๋ฉด ๋๋ค.
class Car {
void sound1() {
System.out.println("๋ถ๋ฆ๋ถ๋ฆ")
}
void sound2() {
System.out.println("๋ถ๋ฅด๋ฆ๋ถ๋ฅด๋ฆ")
}
}
class Car1 extends Car {
void sound1() {
System.out.println("๋นต๋นต")
}
void sound2(int a) {
System.out.println("๋น ์์")
}
}
์ฌ๊ธฐ์ sound1์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋๋ค. ์์๋ฐ์ ๋ฉ์๋์ ๋ฆฌํด ํ์ ๊ทธ๋ฆฌ๊ณ ์๊ทธ๋์ฒ๊ฐ ์๋ฒฝํ๊ฒ ๋์ผํ๊ธฐ ๋๋ฌธ์ด๋ค. sound2๋ Car ํด๋์ค์์ ์ ๋ ฅ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๋ฉ์๋์์ง๋ง, ํด๋์ค Car1์์ ์ ๋ ฅ๋งค๊ฐ๋ณ์๋ก ์ ์ซ๊ฐ 1๊ฐ๋ฅผ ๋ฐ๊ฒ ๋๋ฏ๋ก ๋ฉ์๋ ์๊ทธ๋์ฒ๊ฐ ๋ฌ๋ผ ์ค๋ฒ๋ก๋ฉ์ด ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์ด๋ ํด๋์ค Car1์์ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๋ ์ด 3๊ฐ๊ฐ ๋๋ค. sound1์ Car ํด๋์ค์ Car1 ํด๋์ค ๋ชจ๋ ๋์ผํ ๋ฉ์๋๋ก 1๊ฐ, Car์ ์๋ sound2 ๋ฉ์๋, Car1์ ์๋ ์ ์ซ๊ฐ ํ๋๋ฅผ ๋ฐ๋ sound2 ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
• ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ์ ๊ทผ์ง์ ์
: ์ค๋ฒ๋ผ์ด๋ฉํ ๋๋ ์์๋ฐ์ ๋ฉ์๋์ ์ ๊ทผ ์ง์ ์์ ๋ฒ์๊ฐ ๊ฐ๊ฑฐ๋ ๋์ ์ ๊ทผ ์ง์ ์๋ฅผ ์ฌ์ฉํ๋ค.
class A {
protected void abc() {}
}
class B extends A {
public void abc() {}
}
class C extends A {
protected void abc() {}
}
class D extends A {
void abc() {}
}
class E extends A {
private void abc() {}
}
์ค๋ฒ๋ผ์ด๋ฉ์ ํ ๋ ์ ๊ทผ์ง์ ์์ ๊ฐ๊ฑฐ๋ ๋ ๋์ ์ ๊ทผ์ง์ ์๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ค ํ์ผ๋, void abc( ) ์ private void abc( )๋ ์ฌ์ฉํ ์ ์๋ค.
โ๏ธ ์ธ์คํด์ค ํ๋์ ์ค๋ณต_ 340p
• ์ธ์คํด์ค ํ๋์ ์ค๋ฒ๋ผ์ด๋ฉ
class A {
int m = 3;
}
class B extends A {
int m = 4;
}
์ธ์คํด์ค ํ๋๋ ๋์ผํ ์ด๋ฆ์ผ๋ก ์ ์ํด๋ ์ค๋ฒ๋ผ์ด๋ฉ๋์ง ์๋๋ค. ๊ทธ ์ด์ ๋ ์ ์ฅ ๊ณต๊ฐ์ด ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ดํด๋ณด์์๋, ์ธ์คํด์ค ๋ฉ์๋ ์์ญ์ ๋ถ๋ชจ ํด๋์ค ๋ฉ์๋๊ฐ ์์ฑ๋๊ณ ๊ทธ ์์ ์์ ํด๋์ค ๋ฉ์๋๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ฐ์๋๋ค๊ณ ์ค๋ช ํ๋ค.
์ธ์คํด์ค ํ๋์ ๊ฒฝ์ฐ B ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ธฐ ์ ๋ถ๋ชจ ๊ฐ์ฒด A ๊ฐ์ฒด๊ฐ ๋จผ์ ์์ฑ๋ ๊ฒ์ด๊ณ ๊ทธ ํ ํด๋์ค B์์ ์ถ๊ฐํ ๋ด์ฉ์ ํฌํจํ๋ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ด๋ค. ์ฌ๊ธฐ๊น์ง ๋ฉ์๋ ์์ฑ ๊ณผ์ ๊ณผ ๋น์ทํ๋ค. ํ์ง๋ง ์ธ์คํด์ค ํ๋๋ m=3๊ณผ m=4์ธ ์ด ๋ ๊ฐ์ ํ๋๊ฐ ๋ง๋ค์ด์ ธ ์ ์ฅ๊ณต๊ฐ์ด ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ๋๋ค๋ ๊ฒ์ด ํฐ ์ฐจ์ด๊ฐ ๋๊ฒ ๋ค.
๋ง์ฝ B b = new B( ); ์ ์ธํ๊ณ b.m์ ๊ฐ์ ํ์ธํ ๊ฒฝ์ฐ 4๊ฐ ๋์ฌ ๊ฒ์ด๋ค. b๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ฒ์ง๊ฐ 100๋ฒ์ธ ๊ฒฝ์ฐ, 100๋ฒ์๋ B ๊ฐ์ฒด์ m = 4 ๊ฐ์ด ๋ค์ด์๊ธฐ ๋๋ฌธ์ด๋ค. A a = new B( )๋ก ์์ฑํ ๊ฒฝ์ฐ A ํ์ ์ด๋ฏ๋ก A ๊ฐ๋ฆฌํค๊ณ ์์ ๊ฒ์ด๊ณ ๊ทธ ๋ฒ์ง๊ฐ 200์ผ๋ก B ๊ฐ์ฒด์ ๋ฒ์ง์ ๋ค๋ฅผ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์ฒด๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ๋์ง ์๋๋ค.
• ์ ์ ํ๋์ ์ค๋ณต
A.m = 3;
B.m = 4;
B b = new B();
b.m = 4;
์ ์ ํ๋์ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ ์์ญ์ ํด๋์ค ๋ด๋ถ์ ๋ง๋ค์ด์ง๊ณ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ๋ค. ์คํ์ ํฌํจ๋ A๊ฐ์ฒด์ B๊ฐ์ฒด์๋ m์ ๊ฐ์ด ์ ์ฅ๋์ด์์ง ์๊ณ , ํด๋์ค ์์ญ ์ด๋์ ์ ์ฅ๋์ด์๋์ง ๊ฐ๋ฆฌํฌ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํด๋์ค A์ B ๋ด์ ํฌํจ๋ ์ ์ ํ๋์ ์ ์ฅ๊ณต๊ฐ์ ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ฐ์ํ์ง ์๋๋ค.
์ ์ ๋ฉ์๋์ ๊ฒฝ์ฐ๋ ์ด๋ค์ง ์ดํด๋ณด๋ฉด, ์ ์ ํ๋์ ๊ฐ์์ ์ ์ ์๋ค. ์ ์ ๋ฉ์๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋์ค ๋ด๋ถ์ ์กด์ฌํ์ง ์๊ณ , ๋ค๋ฅธ ๊ณต๊ฐ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ฐ์ํ์ง ์๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ค๋ณต์ด ๋์ด ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ ์ธ์คํด์ค ๋ฉ์๋์ ๊ฒฝ์ฐ๋ง ํด๋น๋๋ ๊ฒ์ ์ ์ ์์๋ค. ์ธ์คํด์ค ํ๋, ์ ์ ํ๋, ์ ์ ๋ฉ์๋ ๋ชจ๋ ๊ฐ ๊ฐ์ฒด์ ์ ์ฅ์ด ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ฐ์ํ์ง ์๋๋ค.
โ๏ธ super_ 349p
• super ํค์๋
: ๋ถ๋ชจ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, ํ๋๋ช ์ ์ค๋ณต์ผ๋ก ๊ฐ๋ ค์ง ๋ถ๋ชจ์ ํ๋ ๋๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
class A {
void abc() {
System.out.println("A ํด๋์ค์ abc()");
}
}
class B extends A{
void abc() {
System.out.println("B ํด๋์ค์ abc()");
}
void bcd() {
super.abc();
}
}
B bb = new B();
bb.bcd();
super์ ์จ์ abc๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด ๋ถ๋ชจ ํด๋์ค์ธ A ํด๋์ค์ abc( )๊ฐ ์คํ๋๋ค.
Q. this์ super์ ์ฐจ์ด์ ์?
A. this๋ ์๊ธฐ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ๋ณ์๋ช ์ด๋ค. this( ) ๋ฉ์๋๋ ์์ ์ ๋ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ๊ณ , ์์ฑ์ ๋ด์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉด ํญ์ ์ฒซ ์ค์ ์์นํด์ผํ๋ค. super๋ ๋ถ๋ชจ์ ๊ฐ์ฒด, super( )๋ ๋ถ๋ชจ์ ์์ฑ์๋ฅผ ์๋ฏธํ๋ค.
class A {
void abc() {
System.out.println("A ํด๋์ค์ abc()");
}
}
class B extends A{
void abc() {
System.out.println("B ํด๋์ค์ abc()");
}
void bcd() {
abc();
}
}
B bb = new B();
bb.bcd();
super์ ์ฐ์ง ์๊ณ abc( )๋ฅผ ์์ํด๋์ค์ ๋ฉ์๋์์ ํธ์ถํ๊ฒ๋๋ฉด this ํค์๋๊ฐ ์ถ๊ฐ๋์ด ์คํ๋๋ค. ๊ทธ๋ฌ๋ฉด ํด๋์ค B์ ์๋ abc( ) ์คํ ์ฝ๋๋ ํด๋์ค B ๋ด๋ถ์ ์๋ abc( )๋ฅผ ์คํํ๊ฒ ๋๋ค. ๊ทธ๋ ๊ธฐ์ ๋ง์ฝ ๋ถ๋ชจ ํด๋์ค์ ์ฝ๋๊ฐ ์์ ํด๋์ค์์ ์คํ๋๊ธธ ์ํ๋ ๊ฒฝ์ฐ superํค์๋๋ฅผ ์ถ๊ฐํด์ผํ๋ค.
• super( ) ๋ฉ์๋
class A {
A() {
this(3);
System.out.println("A ์์ฑ์1")
}
A(int a) {
System.out.println("A ์์ฑ์2")
}
}
class B extends A {
B() {
this(3);
System.out.println("B ์์ฑ์1")
}
B(int a) {
System.out.println("B ์์ฑ์2")
}
}
A aa1 = new A();
A aa2 = new A(3);
B bb1 = new B();
B bb2 = new B(3);
aa1์ ํด๋์ค A์ ์๋ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ํธ์ถ๋๋ค. ๊ฐ์ฅ ์ฒซ ์ฝ๋๋ this(3)์ผ๋ก ๋ด๋ถ์ ์๋ ์ ์๊ฐ ํ๋๋ฅผ ๋ฐ๋ ๋ฉ์๋๋ฅผ ์ฐพ์ ์คํํ๋ค. ๊ทธ๋ฌ๋ฉด A(int a)๊ฐ ์คํ๋๊ณ "A ์์ฑ์2"๊ฐ ์ถ๋ ฅ๋๊ณ ๊ทธ ๋ค์ "A ์์ฑ์1"์ด ์ถ๋ ฅ๋๋ค. aa2๋ 3์ ์ธ์๋ก ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ํด๋์ค A์ ์๋ A(int a)๊ฐ ์คํ๋๋ค. ์์ ํด๋์ค๊ฐ ์๋๋ผ์ ์ปดํ์ผ์ด ์๋์ผ๋ก ๋ถ์ด๋ ๊ฒ ์์ด "A ์์ฑ์2"๊ฐ ์ถ๋ ฅ๋๋ค.
bb1์ ๋ฉ์๋ B์ ์๋ this(3)๊ฐ ๋จผ์ ์คํ๋๋ค. this๋ก ๋ด๋ถ์ ์๋ B(int a)๊ฐ ์คํ๋๋ฉด์ ์ด๋ B(int a)์ ๊ฐ์ฅ ์ฒซ ์ค์ super๊ฐ ๋ถ๊ฒ๋๋ค. ๋ฌผ๋ก ์ด super๋ ์ปดํ์ผ์ด ์๋์ ์ผ๋ก ๋ถ์ธ ๊ฒ์ด๋ค. super๋ก ์ธํด ๋ถ๋ชจ ํด๋์ค๊ฐ ์คํ๋๊ฒ ๋๊ณ ๋ถ๋ชจ ํด๋์ค์ ๊ฐ์ฅ ๊ธฐ๋ณธ ์์ฑ์์ ์๋ this(3)์ผ๋ก ์ธํด A(int a)๊ฐ ์คํ๋์ด "A ์์ฑ์2"๊ฐ ๊ฐ์ฅ ๋จผ์ ์ถ๋ ฅ๋๋ค. ๊ทธ ๋ค์์ "A ์์ฑ์1"์ด ์ถ๋ ฅ์ผ๋ก A( ) ๋ฉ์๋๋ฅผ ๋ง๋ฌด๋ฆฌ ์ง๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์ ํด๋์ค B๋ก ๋์์ super๊ฐ ์งํ๋ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ฏ๋ก "B ์์ฑ์ 2"๊ฐ ์ถ๋ ฅ๋๊ณ B( ) ๋ฉ์๋์ "B ์์ฑ์1"๋ก ๋ง๋ฌด๋ฆฌ๋๋ค. ๊ฐ์ฒด bb2๋ ํด๋์ค B์ ๊ธฐ๋ณธ ์์ฑ์๋ง ์คํ๋์ง ์์ ๋ฟ, ๋๋จธ์ง ๊ณผ์ ์ ๋์ผํ๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ์ฌ์ค์ ๋ชจ๋ ์์ฑ์์ ์ฒซ ์ค์์๋ ๋ฐ๋์ this( ) ๋๋ super( )๊ฐ ์์ด์ผํ๋ค๋ ๊ฒ์ด๋ค. ๋ง์ผ ์๋ฌด๊ฒ๋ ์จ์ฃผ์ง ์์ผ๋ฉด ์ปดํ์ผ๋ฌ๋ super( )๋ฅผ ์๋์ผ๋ก ์ฝ์ ํ๋ค. ์ฆ, ์์ฑ์๋ฅผ ํธ์ถํ ๋๋ ํญ์ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๊ฐ ํ ๋ฒ์ ํธ์ถ๋๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถ๋ชจํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. (super( )๊ฐ ์๋์ ์ผ๋ก ์ถ๊ฐ๋๋๋ฐ, ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ด ์ด๋ค ์ธ์๋ฅผ ๋ฐ๋ ๋ฉ์๋๋ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฐ์)
• ์ ๋ฆฌ
: super( )๋ ์์ํด๋์ค์ ๋ฉ์๋ ๊ฐ์ฅ ์ฒซ ์ค์ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ์ถ๊ฐํ์ฌ ๋ถ๋ชจ ํด๋์ค๊ฐ ์คํ๋๋๋ก ํ๋ค.
this.๋ ๋ถ๋ชจํด๋์ค์ ์์ํด๋์ค์ ์ค๋ณต๋๋ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ์๋ ๊ฒฝ์ฐ, ์์ํด๋์ค์์ ๊ทธ ๋ฉ์๋๋ฅผ ์คํํ๊ณ ์ ํ ๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ๋ด๋ถ ํด๋์ค์ ๋ฉ์๋๊ฐ ์คํ๋๋๋ก this.๋ฅผ ์ถ๊ฐํ๋ค.
'๐ Java > ์๋ฐ์์ ์ ๋ณต' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค (1) | 2025.04.28 |
---|---|
[Java] final, static, abstract ์ ์ด์ (2) | 2025.02.05 |
[Java] ์๋ฐ ์์ ์ ๋ณต_ 10์ฅ ํด๋์ค์ ์์๊ณผ ๋คํ์ฑ (1) (2) | 2024.12.24 |
[Java] ์๋ฐ ์์ ์ ๋ณต_ 9์ฅ ์๋ฐ์ ์ด์ 1 (1) | 2024.12.22 |
[Java] ์๋ฐ ์์ ์ ๋ณต_ 7์ฅ ํด๋์ค ๋ด๋ถ ๊ตฌ์ฑ ์์(this ํค์๋์ this()๋ฉ์๋) (1) | 2024.12.06 |