๐โโ๏ธ ์์(Inheritance)์ด๋,
๋ถ๋ชจ ํด๋์ค๊ฐ ๊ฐ์ง๋ ๋ฉค๋ฒ๋ฅผ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ์ ์์ ์ ๋ฉค๋ฒ์ธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ ๊ธฐ์
- ๋ฉค๋ฒ ์ธ์ ํ์ ๋ํ ์์๋จ (๋คํ์ฑ์ ํ ๋)
- ์๋ฐ๋ ๋จ์ผ ์์(ํ๋์ ํด๋์ค๋ง์ ๋ถ๋ชจ ํด๋์ค๋ก ๊ฐ์ง)๋ง ์ง์
๐โ ์ ๊น ! ์์์ ์ฅ๋จ์ ์์?
- ์ฅ์
- ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑ ์ ๊ธฐ์กด์ ์์ฑ ๋ ํด๋์ค์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
- ํด๋์ค๊ฐ ๊ณ์ธต ๊ด๊ณ๊ฐ ํ์ฑ๋์ด ๋คํ์ฑ ๋ฌธ๋ฒ์ ํ ๋๊ฐ ๋จ
- ๋จ์
- ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์ ์์ ํด๋์ค์ ์ ์์ ์ธ ๋์ ์ ๋ฌด ์์ธก์ด ํ๋ฆ
- ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ๋ค์ ๋ถ๋ชจ ํด๋์ค์์ ๋ณ๊ฒฝ ์ ์ด๋ ค์์ด ๋ฐ๋ฆ
- ๋ถ๋ชจ ํด๋์ค๋ก๋ถํฐ ๋ฌผ๋ ค๋ฐ์ ๊ธฐ๋ฅ์ด ์์ ํด๋์ค์์๋ ๋ฌด์๋ฏธ ํ ์ ์์
- ์ฅ๋จ์ ์ ๊ณ ๋ คํด ๋ณผ ๋ IS-A ๊ด๊ณ๋ก ๊ตฌ๋ถ๋๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผ ํจ
public class Car {
// ์๋์ฐจ์ ๋ฌ๋ฆฌ๋ ์ํ๋ฅผ ํ์ธํ ์ ์๋ ํ๋
private boolean runningStatus;
// ๊ธฐ๋ณธ ์์ฑ์
public Car() {
System.out.println("Car ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ๋จ...");
}
// ์๋์ฐจ์ ๊ธฐ๋ณธ์ ์ธ ๋ฌ๋ฆฌ๋ ๊ธฐ๋ฅ
public void run() {
runningStatus = true;
System.out.println("์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.");
}
// ์๋์ฐจ์ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์ถ๋ ๊ธฐ๋ฅ
public void stop() {
runningStatus = false;
System.out.println("์๋์ฐจ๊ฐ ๋ฉ์ถฅ๋๋ค.");
}
// ์๋์ฐจ์ ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์ ์ ์ธ๋ฆฌ๋ ๊ธฐ๋ฅ
public void soundHorn() {
// ์ฃผํ ์ค์ธ ์ํ์์๋ง ๋์์ ํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ
if(isRunning()) {
>>> ์๋์ ๋ฉ์๋ ํธ์ถ
System.out.println("๋นต!๋นต!๋นต!");
} else {
System.out.println("์ฃผํ ์ค์ด ์๋ ์ํ์์๋ ๊ฒฝ์ ์ ์ธ๋ฆด ์ ์์ต๋๋ค.");
}
}
// private boolean isRunning() {
>>> ๋ด๋ถ์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ ์ธ๋ถ์์๋ ์ ๊ทผํ์ง ๋ชป ํจ
protected boolean isRunning() {
>>> ์ธ๋ถ์์๋ ์ญ์ ์ ๊ทผํ ์ ์์ง๋ง ์์ ํด๋์ค์์๋งํผ์ ์ฌ์ฉ๊ฐ๋ฅ
// ์๋์ฐจ์ ์ฃผํ ์ค ์ํ๋ฅผ ๋ฐํํ๋ ๊ธฐ๋ฅ
return runningStatus;
}
}
public class FireCar extends Car { >>> Car๋ก๋ถํฐ ์์๋ฐ๊ธฐ
// ๊ธฐ๋ณธ ์์ฑ์
public FireCar() {
>>> ๋ชจ๋ ์์ฑ์๋ ๋งจ ์ฒซ ์ค์ super();๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ์ถ๊ฐํ๋๋ฐ,
>>> ์ด๋ ๋ถ๋ชจ์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ตฌ๋ฌธ
>>> ๋ฐ๋ผ์ ์ถ๋ ฅ ์ Car ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ๋จ...์ด ๋จผ์ ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ฉฐ
>>> ๋ช
์์ , ๋ฌต์์ ๋ชจ๋ ๊ฐ๋ฅ
super();
System.out.println("FireCar ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ ๋จ...");
}
// ์๋ฐฉ์ฐจ์ ๊ฒฝ์ ์๋ฆฌ๊ฐ ๋๋ฌด ์์ผ๋ฏ๋ก ์กฐ๊ธ ๋ ํค์๋ณด๊ธฐ
>>> ๊ฒฝ์ ์๋ฆฌ๋ฅผ ๋ด๋ ์ฉ๋์ ๋ฉ์๋ ์ ์ธ๋ถ๋ ๊ทธ๋๋ก ๋๋ ์๋ฐฉ์ฐจ ์ชฝ์์ ์ฌ์ ์
>>> Override ์ด๋
ธํ
์ด์
: ์ค๋ฒ๋ผ์ด๋ฉ ์ฑ๋ฆฝ ์๊ฑด์ ์ฒดํฌํ์ฌ ์ฑ๋ฆฝ ๋์ง ์์ ๊ฒฝ์ฐ ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฐ์
@Override
public void soundHorn() {
>>> ๋ฉ์๋๋ฅผ ์๋ฒฝํ ๋๊ฐ์ด ์ ์ ๋ค, ๋ด์ฉ์ ๋ฐ๊ฟ
>>> ๋ถ๋ชจ ํด๋์ค๊ฐ ๊ฐ์ง ๋ฉ์๋์ ์ ๊ทผ ์ ํ์๊ฐ private์ผ ๋๋ ์์ ํด๋์ค์์ ํธ์ถ ๋ถ๊ฐํ์ง๋ง
>>> protected๋ก ๋ณ๊ฒฝํ๋ฉด ์์ ๊ด๊ณ์ ์๊ธฐ ๋๋ฌธ์ ํธ์ถ ๊ฐ๋ฅ
if(isRunning()) {
System.out.println("๋ฟ์์์์์์์!!!!!!");
} else {
System.out.println("์๋ฐฉ์ฐจ๊ฐ ์์ผ๋ก ๊ฐ ์ ์์ต๋๋ค ! ๋นํค์ธ์ !!");
}
}
>>> ์์ ํด๋์ค๋ง ๊ฐ์ง๋ ๊ธฐ๋ฅ์ ์ถ๊ฐ์ ์ผ๋ก ์ ์ํ ์ ์์ (๋ฌผ ๋ฟ๋ฆฌ๋ ๊ธฐ๋ฅ)
public void sprayWater() {
System.out.println("๋ถ๋ ๊ณณ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฌผ์ ๋ฟ๋ฆฝ๋๋น! ===========ํธ์=========>>>>");
}
}
๐ Ref.
* ํด๋์ค ์ ์ธ๋ถ์ extends Car๋ฅผ ์ถ๊ฐํ๋ฉด FireCar ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ธ Car๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ์์ ๋ฐ์
ํ์ง๋ง, ์์ฑ์๋ ์์๋ฐ์ง ๋ชป ํ๋ค. ๋ํ ๋ถ๋ชจ๊ฐ ๊ฐ์ง๊ณ ์๋ private ๋ฉค๋ฒ๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅ
* ์๋ฐ์์์ ์์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ชจ๊ฐ ๊ฐ์ง ๋ฉค๋ฒ๋ฅผ ์์์ด ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด์ง๋ง ๋ ๋์๊ฐ์ ๋ถ๋ชจ ํด๋์ค์ ํ์ฅ(extend)์ ๊ฐ๋
์ ๊ฐ์ง
* ์ถ๊ฐ์ ์ธ ์์ ์ ๋ฉค๋ฒ ์์ฑ ๋ํ ๊ฐ๋ฅํ๋ฐ, ๋ฉ์๋ ์ฌ์ ์(overriding)๋ผ๋ ๊ธฐ์ ์ ์ด์ฉํด์ ๋ถ๋ชจ๊ฐ ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ ์ ์์
public class RacingCar extends Car {
// ๊ธฐ๋ณธ ์์ฑ์
public RacingCar() {
super();
>>> ์์ฑํ์ง ์์๋ ๋ฌต์์ ์ผ๋ก ๋ช
์๋์ด์์ (๋ช
์ํด๋ ์๊ด์์)
System.out.println("RacingCar ํด๋์ค ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ ๋จ...");
}
@Override
public void soundHorn() {
System.out.println("๋ ์ด์ฑ์นด๋ ๊ฒฝ์ ์ ์ธ๋ฆฌ์ง ์์ต๋๋ค. (์กฐ..์ฉ..)");
}
@Override
public void run() {
System.out.println("๋ ์ด์ฑ์นด๊ฐ ์ ์๋ ฅ์ผ๋ก ์ง์ฃผํฉ๋๋ค !!!!!!!!! ๋ถ์์์์");
}
}
public class Application {
public static void main(String[] args) {
Car car = new Car();
car.soundHorn(); >>> ์๋์ฐจ๊ฐ ์ถ๋ฐํ์ง์์์ ๊ฒฝ์ ์ด ์ธ๋ฆฌ์ง ์์
car.run(); >>> ๋ฌ๋ฆผ
car.soundHorn(); >>> ๋นต๋นต
car.stop(); >>> ๋ฉ์ถค
car.soundHorn(); >>> ์๋์ฐจ๊ฐ ๋ฉ์ท๊ธฐ๋๋ฌธ์ ๊ฒฝ์ ์ด ์ธ๋ฆฌ์ง ์์
System.out.println();
// Car๋ฅผ ์์ ๋ฐ์ FireCar ํ์
์ ๊ฐ์ฒด ์์ฑ
FireCar fireCar = new FireCar();
fireCar.soundHorn();
fireCar.run();
fireCar.soundHorn();
fireCar.stop();
fireCar.soundHorn();
fireCar.sprayWater();
// Car.sprayWater();
>>> ์์ ํด๋์ค์๋ง ์๋ ๋ฉ์๋๋ฅผ ๋ถ๋ชจ ํด๋์ค์์๋ ์ฌ์ฉํ ์ ์์
System.out.println();
// Car๋ฅผ ์์ ๋ฐ์ RacingCar ํ์
์ ๊ฐ์ฒด ์์ฑ
RacingCar racingCar = new RacingCar();
racingCar.soundHorn();
racingCar.run();
racingCar.soundHorn();
racingCar.stop();
racingCar.soundHorn();
}
}
๐ Ref.
* ์์์ ๋ถ๋ชจ๊ฐ ๊ฐ์ง ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉด์ ํ์ฅ๊น์ง ๊ฐ๋ฅ.
ํ์ง๋ง car ์ธ์คํด์ค๋ก๋ fireCar ์ธ์คํด์ค๊ฐ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์.
์์์ ๋ถ๋ชจ ๋ฉค๋ฒ์ ์ ๊ทผํด์ ์์ ์ ๋ฉค๋ฒ์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง, ๋ฐ๋์ ๊ฒฝ์ฐ๋ ํ์ฉํ์ง ์์
๐ป Mini Console
Car ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ๋จ...
์ฃผํ ์ค์ด ์๋ ์ํ์์๋ ๊ฒฝ์ ์ ์ธ๋ฆด ์ ์์ต๋๋ค.
์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.
๋นต!๋นต!๋นต!
์๋์ฐจ๊ฐ ๋ฉ์ถฅ๋๋ค.
์ฃผํ ์ค์ด ์๋ ์ํ์์๋ ๊ฒฝ์ ์ ์ธ๋ฆด ์ ์์ต๋๋ค.
Car ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ๋จ...
FireCar ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ ๋จ...
์๋ฐฉ์ฐจ๊ฐ ์์ผ๋ก ๊ฐ ์ ์์ต๋๋ค ! ๋นํค์ธ์ !!
์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.
๋ฟ์์์์์์์!!!!!!
์๋์ฐจ๊ฐ ๋ฉ์ถฅ๋๋ค.
์๋ฐฉ์ฐจ๊ฐ ์์ผ๋ก ๊ฐ ์ ์์ต๋๋ค ! ๋นํค์ธ์ !!
๋ถ๋ ๊ณณ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฌผ์ ๋ฟ๋ฆฝ๋๋น! ===========ํธ์=========>>>>
Car ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ๋จ...
RacingCar ํด๋์ค ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ ๋จ...
๋ ์ด์ฑ์นด๋ ๊ฒฝ์ ์ ์ธ๋ฆฌ์ง ์์ต๋๋ค. (์กฐ..์ฉ..)
๋ ์ด์ฑ์นด๊ฐ ์ ์๋ ฅ์ผ๋ก ์ง์ฃผํฉ๋๋ค !!!!!!!!! ๋ถ์์์์
๋ ์ด์ฑ์นด๋ ๊ฒฝ์ ์ ์ธ๋ฆฌ์ง ์์ต๋๋ค. (์กฐ..์ฉ..)
์๋์ฐจ๊ฐ ๋ฉ์ถฅ๋๋ค.
๋ ์ด์ฑ์นด๋ ๊ฒฝ์ ์ ์ธ๋ฆฌ์ง ์์ต๋๋ค. (์กฐ..์ฉ..)