
ìììŽë Ʞ졎ì íŽëì€ì êž°ë¥ì ì¶ê°íê±°ë ì¬ì ìíì¬ ìë¡ìŽ íŽëì€ë¥Œ ì ìíë ê²ì ì믞íë€. ê°ì²Ž ì§í¥ íë¡ê·žëë°ì 구ì±íë Javaìì ììì ì€ìí í¹ì§ ì€ íëìŽë€.
class ììíŽëì€ìŽëŠ extends ë¶ëªšíŽëì€ìŽëŠ{
...
}
ììì extends í€ìë륌 ì¬ì©íì¬ êž°ì¡Žì ì ìëìŽ ìë íŽëì€ì 몚ë íëì ë©ìë륌 ë¬Œë €ë°ì ì¬ì©íë€.
ìŽë Ʞ졎ì ì ì ëìŽìë íŽëì€ë¥Œ ë¶ëªš íŽëì€, ìì íŽëì€, êž°ìŽ íŽëì€ëŒê³ íê³ ììì íì¬ ìì±ëë íŽëì€ë¥Œ ìì íŽëì€, íì íŽëì€, íì íŽëì€ëŒê³ íë€.

ë€ì곌 ê°ìŽ ë¶ëªš íŽëì€ë ìì íŽëì€ì í¬íšëë€. ë°ëŒì ë¶ëªš íŽëì€ì ìë¡ìŽ íë, ë©ìë륌 ì¶ê°í멎 ìì íŽëì€ìë ìëìŒë¡ ì¶ê°ë ê²ì²ëŒ ëìíë€.
ë°ëŒì ììì í ëë IS-A êŽê³ê° íì€ í ë ì¬ì©íë ê²ìŽ ì¢ë€. IS-A êŽê³ë Dog is a Animalì²ëŒ íìê°ë ìŽ íì€í 겜ì°ë¥Œ ë§íë€.
super í€ìëë ë¶ëªš íŽëì€ë¡ë¶í° ììë°ì íëë ë©ìë륌 ìì íŽëì€ìì ì°žì¡°íë ë° ì¬ì©íë ì°žì¡° ë³ììŽë€.
ì§ë ìê°ì ìžì€íŽì€ ë³ìì ìŽëŠê³Œ ì§ì ë³ìì ìŽëŠìŽ ê°ì ê²œì° thisí€ìë륌 ì¬ì©íë ê²ì ë°°ì ë€. ìŽì²ëŒ ë¶ëªš íŽëì€ì ë©€ë²ì ìì íŽëì€ì ë©€ë² ìŽëŠìŽ ê°ì ê²œì° superí€ìë륌 ì¬ì©íì¬ êµ¬ë¶í ì ìë€.
class Parent{
int a = 10;
}
class Child extends Parent{
int a = 15;
void show(){
int a = 20;
System.out.println(a); //20
System.out.println(this.a); //15
System.out.println(super.a);//10
}
}
this() ì²ëŒ ë¶ëªš íŽëì€ì ìì±ì륌 ížì¶í ë super()륌 ì¬ì©íë€. ìì íŽëì€ì ìžì€íŽì€ë¥Œ ìì±í멎 íŽë¹ ìžì€íŽì€ë ìì íŽëì€ì ê³ ì ë©€ë²ë¿ìëëŒ ë¶ëªš íŽëì€ì 몚ë ë©€ë²ê¹ì§ í¬íšëë€.
ìŽë ë¶ëªšíŽëì€ì ë©€ë²ë¥Œ ìŽêž°ííê³ ì¶ë€ë©Ž ë€ì곌 ê°ìŽ ììíŽëì€ì ìì±ììì ë¶ëªš íŽëì€ì ìì±ì륌 ížì¶íŽìŒíë€.
class Parent{
int age;
Parent(int n){
age += n;
}
}
class Child extends Parent{
int age;
Child(){
this.age = 20;
}
}
ìŽ ìœëë ì€ë¥ê° ë°ìíë€. 컎íìŒë¬ ì child ìì±ììì ìëìŒë¡ super()ê° ìì±ëì§ë§ Parent íŽëì€ì ë§€ê°ë³ì륌 ê°ì§ë ëª ìì ìì±ìë§ ìì±íêž° ë묞ì Ʞ볞ìì±ìê° ìëìŒë¡ ìì±ëì§ ìëë€. ë°ëŒì super()ë¡ ë¶ëªš íŽëì€ì Ʞ볞 ìì±ì륌 ížì¶í ì ìë€. ë°ëŒì ëª ìì ìì±ì륌 ìì±íë ê²œì° ëëë¡ìŽë©Ž 묵ìì ìì±ìê¹ì§ ìì±íë ê²ìŽ ì¢ë€.
class Parent{
int age;
Parent(){
age = 30;
}
Parent(int n){
age = n;
}
}
class Child extends Parent{
int age;
Child(){
// (1)
this.age = 20;
}
}
ìŽë ê² íŽìŒ Child ìì±ììì ìëìŒë¡ super()ê° ì¶ê°ëìŽë ageê° 30ìŽ ëê³ (1)ì늬ì super(20)ì ì ë ¥íì¬ë ìëìŽ ëìŽ ageê° 20ìŽ ë ê²ìŽë€.
ë©ìë ì€ë²ëŒìŽë©ì ìì êŽê³ì ìë ë¶ëªš íŽëì€ìì ìŽë¯ž ì ìë ë©ìë륌 ìì íŽëì€ìì ë€ì ì ìíë ê²ì ë§íë€.
class Parent{
void show(){
System.out.println("ë¶ëªš íŽëì€ì show() ë©ìëì
ëë€.");
}
}
class Child extends Parent{
//ì€ë°ëŒìŽë©
void show(){
System.out.println("ìì íŽëì€ì show() ë©ìëì
ëë€.");
}
//ì€ë²ë¡ë©
void show(String str){
System.out.println(str);
}
}
ë€ì곌 ê°ìŽ ì€ë²ëŒìŽë©ìŒë¡ ì¬ì ìí ì ìëë° ë¹ì·í ì©ìŽë¡ ì€ë²ë¡ë©ìŽ ìë€. ë§€ê°ë³ìì ê°ìë íì ì ë€ë¥Žê² í멎 íëì ìŽëŠìŒë¡ ë©ìë륌 ìì±í ì ìëë° ì€ë²ë¡ë©ì ìŽë ê² ê°ì ìŽëŠì ë©ìë륌 ì€ë³µíì¬ ì ìíë ê²ì ì믞íë€.
Dynamic Method Dispatchë ì€ë²ëŒìŽë ë ë©ìëì ëí ížì¶ìŽ ì»ŽíìŒíììŽ ìë ë°íìì ê²°ì ëë 맀컀ëìŠìŽë€.
Method Dispatchë ìŽë€ ë©ìë륌 ížì¶í ê²ìžê°ë¥Œ ê²°ì íê³ ì€ííë 곌ì ì ì믞íë€. ížì¶ë ë©ìëê° ì»ŽíìŒ ìì ì ê²°ì ë멎 Static Method DispatchìŽê³ ì€íìì ì ê²°ì ë멎 Dynamic Method DispatchìŽë€.
ì°ì Static Method Dispathì ìì륌 볎ì.
class A{
void show(){
System.out.println("1");
}
}
public class main{
public static void main(String[] args){
A a = new A();
a.show();
}
}
ìŽë ê² êµ¬ì±í멎 컎íìŒì í ë, A ê°ì²Žê° ë§ë€ìŽì§ë 걞 íìží ì ìê³ í¬íšë showë©ìë륌 ì¬ì©íë ê² ê¹ì§ íìží ì ìë€.
class A{
void show(){
System.out.println("1");
}
}
class B extends A{
void show(){
System.out.println("2");
}
}
public class main{
public static void main(String[] args){
A a = new B();
a.show();
}
}
ìŽ ê²œì°ë ëì ë©ìë ëì€íšì¹ë¡ 컎íìŒ ììë Aìžì§ Bìžì§ 몚륎ë ìíìŽì§ë§, ë°íìì ë©ìëê° ì íŽì§ë€.
íŽëì€ë€ì ê³µíµì ìž í¹ì±ì ì¶ì¶íì¬ ì ìží íŽëì€ë¥Œ ì¶ì íŽëì€ëŒê³ íë€.
ì¶ìíŽëì€ê° ë¶ëªšìŽë©Ž ìì íŽëì€ë ì¶ì íŽëì€ì 몚ë í¹ì±ì ë¬Œë €ë°ì ì¶ê°ì ìž í¹ì±ì ê°ì§ ì ìë€. ìŽë ì¶ìíŽëì€ë ê³µíµëë íëì ë©ìë륌 ì¶ì¶íŽì ë§ë€êž° ë묞ì ê°ì²Žë¥Œ ì§ì ìì±(newì°ì°ì륌 ì¬ì©íŽ ìžì€íŽì€ ìì±)í ì ìë€.
abstract class Animal{
abstract void sound();
public void age(){
System.out.println("20");
}
}
class Dog extends Animal{
void sound(){
System.out.println("ë©ë©");
}
}
class cat extends Animal{
void sound(){
System.out.println("ëì¹");
}
public void age(){
System.out.println("30");
}
}
public class Test{
public static void main(String[] args){
Dog mark = new Dog();
mark.sound();
Cat zero = new Cat();
zero.sound();
}
}
ë€ì곌 ê°ìŽ ì¶ìë©ìëê° íëìŽì ìì±ë ì¶ìíŽëì€ë¥Œ ììíŽëì€ê° ììì ë°ìŒë©Ž ì¶ìë©ìëë ììíŽëì€ìì ë°ëì ì€ë²ëŒìŽëíŽì£ŒìŽìŒ íë€.
final í€ìëë ë³ì, ë©ìë, íŽëì€ ìì ë¶ìŒ ì ìë ìììŽë¡ ì²ì ì ìë ìíê° ë³íì§ ìëë¡ ë³Žì¥íŽì€ë€.
final ë©ìë : ì€ë²ëŒìŽë©ì í ì ìë€.
final íŽëì€ : ììì í ì ìë€.
ìë°ìì Object íŽëì€ë 몚ë íŽëì€ì ë¶ëªš íŽëì€ë¡ ë³ëì extends í€ìë ììŽë 몚ë ë©€ë²ë¥Œ ì¬ì©í ì ìë€.
| ë©ìë | ì€ëª |
|---|---|
| protected Object clone() | íŽë¹ ê°ì²Žì ë³µì 볞ì ìì±íì¬ ë°ííë€. |
| boolean equals(Object obj) | íŽë¹ ê°ì²Žì ì ë¬ë°ì ê°ì²Žê° ê°ìì§ ì¬ë¶ë¥Œ ë°ííë€. |
| protected void finalize() | íŽë¹ ê°ì²Žë¥Œ ëìŽì ì°žì¡°íì§ ìì garbage collectorê° ê°ì²Žì 늬ìì€ë¥Œ ì 늬íêž° ìíŽ ížì¶íë€. |
| Class getClass() | íŽë¹ ê°ì²Žì íŽëì€ íì ì ë°ííë€. |
| int hashCode() | íŽë¹ ê°ì²Žì íŽì ìœëê°ì ë°ííë€. |
| void notify() | íŽë¹ ê°ì²Žì ëêž°íê³ ìë íëì ì€ë ë륌 ë€ì ì€íí ë ížì¶íë€. |
| void notifyAll() | íŽë¹ ê°ì²Žì ëêž°íê³ ìë 몚ë ì€ë ë륌 ë€ì ì€íí ë ížì¶íë€. |
| String toString() | íŽë¹ ê°ì²Žì ì 볎륌 묞ììŽë¡ ë°ííë€. |
| void wait() | íŽë¹ ê°ì²Žì ë€ë¥ž ì€ë ëê° notify()ë votifyAll() ë©ìë륌 ì€íí ëê¹ì§ íì¬ ì€ë ë륌 ìŒìì ìŒë¡ ëêž°ìí¬ ë ì¬ì©íë€. |
| void wait(long timeout) | íŽë¹ ê°ì²Žì ë€ë¥ž ì€ë ëê° notify()ë notifyAll()ë©ìë륌 ì€ííê±°ë ì ë¬ë°ì ìê°ìŽ ì§ë ëê¹ì§ íì¬ ì€ë ë륌 ìŒìì ìŒë¡ ëêž°ìí¬ ë ì¬ì©íë€. |
| void wait(long timeout, int nanos) | íŽë¹ ê°ì²Žì ë€ë¥ž ì€ë ëê° notify()ë notifyAll()ë©ìë륌 ì€ííê±°ë ì ë¬ë°ì ìê°ìŽ ì§ëê±°ë ë€ë¥ž ì€ë ëê° íì¬ ì€ë ë륌 interruptí ë ê¹ì§ íì¬ ì€ë ë륌 ìŒìì ìŒë¡ ëêž°ìí¬ ë ì¬ì©íë€. |
Reference
볞 ì€í°ëë 2020 백Ʞì ëì ìë°ì€í°ëì 컀늬íëŒì ì°žê³ íì¬ ì§ííê³ ììµëë€.