โ๏ธ ๊ฐ์ฒด์งํฅ์ ํตํด์ ๋ฌ์ฑํ๊ณ ์ ํ๋ ๋ชฉํ ์ค์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ = ์ฌํ์ฉ์ฑ
โ๏ธ ์์์ ๊ฐ์ฒด์งํฅ์ ์ฌํ์ฉ์ฑ์ ๊ทน๋ํ์ํจ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ
โ๏ธ ๊ธฐ์กด์ ํด๋์ค์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ์ฌ์ ์ํ์ฌ ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ
1. ๋ถ๋ชจ์ ์ฐจ๋ณํ๋๋ ์์๋ง์ ๊ณ ์ ํ ๋ญ๊ฐ๊ฐ ์์ด์ผํจ.
์๋ฅผ ๋ค์ด, ๋ฉ์๋๋ ๋ฉค๋ฒ๋ณ์, ์์ฑ์๊ฐ ์ถ๊ฐ๊ฐ ๋๋ค.
์ฆ, ๋ถ๋ชจ๊ฐ ํ๋ ์ผ ๋ง๊ณ ์์ํด๋์ค์๋ ๋ค๋ฅธ ์ผ์ ํด์ผ ํ๋ค.
๋ถ๋ชจํด๋์ค์ ๊ณตํต๋ ํน์ง์ด ์๋ ๊ทธ ๊ณ ์ ์ ์ฑ์ง์ ๊ฐ์ง +a. ํ์ํ ๊ธฐ๋ฅ๋ง ๋ฃ์!
2. ์์์ ๊ด๊ณ๋ฅผ is -a ์ฑ๋ฆฝํด์ผํ๋ค.
๊ฐ์๋ผ๋ ๊ฐ๋
์ด ์๊ณ ๊ทธ ๋ฐ์ ์์ด์ ๊ฐ ์๋ค๊ณ ํ์.
์์ด์ ๋ ํ์๊ฐ๋
์ ๋ปํ๊ณ ๊ฐ์๋ ์์๊ฐ๋
์ด๋ค.
์ฆ, ์์ด์ is a ๊ฐ์. ์ด๋ฐ์์ผ๋ก ์ฑ๋ฆฝ์ด ๋ผ์ผํ๋ค.
๊ฐ๋ ์ ๊ฐ์ ๋งฅ๋ฝ์ ์์ด์ผํ๋ค.
๊ฑฐ์ง์ด ๋๋ ๊ฒ์ ์ํ๊ด๊ณ๋ก ๋ฌถ์ผ๋ฉด ์๋๋ค.
๋ ์ค์ ํ๋๋ง ๋ง์กฑํด์ผ ํ๋ ๊ฒ์ด ์๋, ๋๋ค ์ฑ๋ฆฝํด์ผ ํ๋ค.
class Car {
int speed; // ์๋
public void setSpeed(int speed) { // ์๋ ๋ณ๊ฒฝ ๋ฉ์๋
this.speed = speed;
}
}
class ElectricCar extends Car {
int battery;
public void charge(int amount) { // ์ถฉ์ ๋ฉ์๋
battery += amount;
}
}
ElectricCar๋ ๋ถ๋ชจํด๋์ค์ธ Car์๊ฒ ์์๋ฐ์๋ค.
๊ทธ๋์ Car๋ผ๋ ๋ถ๋ชจ ํด๋์ค๊ฐ ์์ด์ผ ElectricCar๊ฐ ์ฑ๋ฆฝํ ์ ์๋ค.
class Hero {
public Hero() {
System.out.println("Hero ์์ฑ์");
}
}
class SuperHero extends Hero {
public SuperHero() {
System.out.println("SuperHero์ ์์ฑ์");
}
}
public class Main {
public static void main(String[] args) {
SuperHero s = new SuperHero();
}
}
[๊ฒฐ๊ณผ๊ฐ]
Hero ์์ฑ์
SuperHero์ ์์ฑ์
์์ํด๋์ค ์ผ ์๋ก ๊ตฌ์ฒดํ๋๊ณ , ๋ถ๋ชจ ํด๋์ค ์ผ ์๋ก ์ถ์์ ์ธ ๊ฒ์ผ๋ก ์ผ๋ฐํ ๋๋ค.
์ค๋ณต๋๋ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค.
๊ณตํต ๋ถ๋ถ์ ํ๋๋ก ์ ๋ฆฌ๋์ด์ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ณ , ์ ์ง ๋ณด์์ ๋ณ๊ฒฝ์ด ์ฌ์์ก๋ค.
: ํ์ง๋ง ์ด๋ฐ ๋ถ๋ถ์ ์์ด์ ์์กด์ฑ์ด ๊ต์ฅํ ๋์ ๊ธฐ์ ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋ ์ด๋ค ๊ด๊ณ๋ค ๋ณด๋ค ์์กด์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ๋ง ๋ฐ๊ฟ๋ ๋ค ๋ฐ๊ปด์ง๋ ๊ทธ๋ฐ ์ํ์ฑ์ด ์๋ค. ๊ทธ๋์ ์์กด์ฑ์ ๋์ผ๋ฉด ๋์ ์๋ก ์ข์ง์๋ค.
์ด๋ป๊ฒ ๋ณด๋ฉด ๋๊ฒ ์ข์ ์ ๋ ์์ง๋ง ์์ข์ ์ ๋ ์๋ค.
โ๏ธ ๋ถ๋ชจ ํด๋์ค์ ์์ ํด๋์ค์ ๊ด๊ณ๋ฅผ ์์(super) ํด๋์ค์ ํ์(sub) ํด๋์ค๋ผ๊ณ ํํํ๊ธฐ๋ ํ๋ค. ๋ํ ๊ธฐ์ด ํด๋์ค(base class), ์ ๋ ํด๋์ค(derived class)๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
// ์์์์
class Calculator {
int left;
int right;
public void setOprands(int left, int right) {
this.left = left;
this.right = right;
}
public void sum() {
System.out.println(this.left + this.right);
}
public void avg() {
System.out.println((this.left + this.right) / 2);
}
}
// ๋นผ๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ
class SubstractionableCalculator extends Calculator {
public void substract() {
System.out.println(this.left - this.right);
}
}
// ๊ณฑํ๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ
class MultiplicationableCalculator extends Calculator {
public void multiplication() {
System.out.println(this.left * this.right);
}
}
// ๊ณฑํ๊ธฐ ๊ธฐ๋ฅ ๋ด์ ๋๋๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ
class DivisionableCalculator extends MultiplicationableCalculator {
public void division() {
System.out.println(this.left / this.right);
}
}
public class CalculatorDemo1 {
public static void main(String[] args) {
MultiplicationableCalculator c1 = new MultiplicationableCalculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.multiplication();
}
}
class Mother {
public void eat() {
//์๋ง๋ ์ค๋ฅธ์์ก์ด๋ค
System.out.println("์ค๋ฅธ์์ผ๋ฃจ ๋ฐฅ๋จน๋๋ค");
}
}
class Daughter extends Mother {
//๋ธ์ ์์์ก์ด์ด๋ค.
public void eat() {
System.out.println("์ผ์์ผ๋ก ๋ฐฅ๋จน๋๋ค.");
}
}
public class Test { // ์ค๋ฒ๋ผ์ด๋
public static void main(String[] args) {
Daughter d = new Daughter();
d.eat();
}
}
public final class String
implements java.io.Serializable ...
//String ํด๋์ค๋ฅผ ์์ํ๋ฉด ์๋ฌ
public class LimitString extends String { // ์๋ฌ
}
์ผ๋ฐ์ ์ผ๋ก๋ ๋ง๋ ์ผ์ด์ค๋ ์๋๋ฐ ๋ง์์ผ ํ๋ ๊ฒฝ์ฐ๋ ์๊ธฐ ๋๋ฌธ์ ์์๋๋ ๊ฒ์ด ์ข๋ค.