π‘ μμ(ν΄λμ€)μ΄ μμλ°κ³ μΆμ λΆλͺ¨(ν΄λμ€)λ₯Ό μ νν΄μ λ¬Όλ €λ°λλ€. μ΄ λ, μμλ°λ ν΄λμ€λ₯Ό μμ ν΄λμ€, νμ ν΄λμ€(μλΈ ν΄λμ€)λΌκ³ λΆλ₯Έλ€. μμμ ν΄μ£Όλ ν΄λμ€λ₯Ό λΆλͺ¨ ν΄λμ€(μμ ν΄λμ€ λλ μνΌ ν΄λμ€)λΌκ³ νλ€.
μμ ν΄λμ€κ° λΆλͺ¨ ν΄λμ€λ‘λΆν° μμμ λ°κ² λλ©΄ λΆλͺ¨ ν΄λμ€μ νλμ λ©μλλ₯Ό λ¬Όλ €λ°κ² λλ€.
λ¨, μ κ·Όμ μ΄μκ° privateλ₯Ό κ°μ§λ νλλ λ©μλλ μμμ΄ λΆκ°νκ³ , ν¨ν€μ§κ° λ€λ₯Ό κ²½μ° μ κ·Όμ μ΄μκ° defaultμΈ κ²½μ°λ μμμ΄ λΆκ°νλ€.
μ€λ³΅λ μ½λλ₯Ό μ€μΌ μ μλ€.
μ μ§ λ³΄μκ° νΈλ¦¬νλ€.
ν΅μΌμ±μ΄ μκ³ λ€νμ±μ ꡬνν μ μλ€.
μμ ν΄λμ€μ μ΄λ¦ λ€μ extends ν€μλλ₯Ό μ¬μ©νκ³ λΆλͺ¨ ν΄λμ€μ μ΄λ¦μ μ λλ€
public class A extends B {...}
π‘ μλ°μμλ μμ ν΄λμ€κ° μ¬λ¬ λΆλͺ¨λ‘λΆν° λ€μ€ μμμ λ°λ κ²μ΄ λΆκ°λ₯νλ€. μ¦, λ¨ ν κ°μ λΆλͺ¨ ν΄λμ€λ‘λΆν°μ λ¨μΌ μμλ§ νμ© λλ€. νμ§λ§ λΆλͺ¨ ν΄λμ€λ μ¬λ¬ κ°μ μμ ν΄λμ€μκ² μμμ΄ κ°λ₯νλ€.
β λΆκ°λ₯
class A extends B, C {...}
βοΈ κ°λ₯
class A extends B {...}
class C extends B {...}
class B extends C {...}
class A extneds B {...}
class A {
String aField = "ν΄λμ€ Aμ νλ";
public void aMethod() {
System.out.println(aField);
}
}
class B extends A {
String bField = "ν΄λμ€ Bμ νλ";
public void bMethod() {
System.out.println(aField); // λΆλͺ¨ ν΄λμ€μ νλ
System.out.println(bField); // λ³ΈμΈ ν΄λμ€μ νλ
}
}
class C extends B {
String cField = "ν΄λμ€ Cμ νλ";
public void cMethod() {
System.out.println(aField); // μ‘°λΆλͺ¨ ν΄λμ€μ νλ
System.out.println(bField); // λΆλͺ¨ ν΄λμ€μ νλ
System.out.println(cField); // λ³ΈμΈ ν΄λμ€μ νλ
}
}
publuc class Main {
publuc static void main(String[] args) {
A a = new A();
a.aMethod(); // λ³ΈμΈ λ©μλ
B b = new B();
b.aMethod(); // λΆλͺ¨ λ©μλ
b.bMethod(); // λ³ΈμΈ λ©μλ
C c = new C();
c.aMethod(); // μ‘°λΆλͺ¨ λ©μλ
c.bMethod(); // λΆλͺ¨ λ©μλ
c.cMethod(); // λ³ΈμΈ λ©μλ
}
}
π‘ super ν€μλλ λΆλͺ¨ ν΄λμ€λ‘λΆν° μμλ°μ νλλ λ©μλλ₯Ό μμ ν΄λμ€μμ μ°Έμ‘°νλ λ°μ μ¬μ©νλ μ°Έμ‘°λ³μμ΄λ€.
β‘οΈ μΈμ€ν΄μ€ λ³μμ μ΄λ¦κ³Ό μ§μ λ³μμ μ΄λ¦μ΄ κ°μ κ²½μ° μΈμ€ν΄μ€ λ³μ μμ this ν€μλλ₯Ό μ¬μ©νμ¬ κ΅¬λΆν μ μλλ°, μ΄μ λ§μ°¬κ°μ§λ‘ λΆλͺ¨ ν΄λμ€μ λ©€λ²μ μμ ν΄λμ€μ λ©€λ² μ΄λ¦μ΄ κ°μ κ²½μ° super ν€μλλ₯Ό μ¬μ©νμ¬ κ΅¬λΆνλ€.
class B { int a = 10; }
class A extends B {
int a = 20;
void display() {
System.out.println(a); // μ€νκ²°κ³Ό: 20
System.out.println(this.a); // μ€νκ²°κ³Ό: 20
System.out.println(super.a); // μ€νκ²°κ³Ό: 10
}
}
publuc class Main {
public static void main(String[] args) {
A a = new A();
a.display();
}
}
π‘ λ©μλ μ€λ²λΌμ΄λ©μ΄λ μμλ°μ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνμ¬ μ¬μ©νλ κ²μ μλ―Ένλ€.
β‘οΈ μ£Όλ‘ μμ ν΄λμ€μμ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄μΌ ν λ μ¬μ©λλ€. μΌλ° ν΄λμ€μ μμ κ΄κ³μμλ λ§μ΄ μ¬μ©λμ§ μκ³ μΆμν΄λμ€λ μΈν°νμ΄μ€μμ νμμ μΌλ‘ μ¬μ©λλ κ°λ μ΄λ€. νμμ super ν€μλλ‘ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό νΈμΆν μ μλ€.
μ€λ²λΌμ΄λ©μ λ©μλμ λμλ§μ μ¬μ μνλ κ²μΌλ‘, λ©μλμ μ μΈλΆλ κΈ°μ‘΄ λ©μλμ κ°μμΌ νλ€.
λΆλͺ¨ ν΄λμ€μ λ©μλλ³΄λ€ μ κ·Ό μ μ΄μλ₯Ό λ μ’μ λ²μλ‘ λ³κ²½ν μ μλ€.
λΆλͺ¨ ν΄λμ€μ λ©μλλ³΄λ€ λ ν° λ²μμ μμΈλ₯Ό μ μΈν μ μλ€.
class B {
void display() {
System.out.println("λΆλͺ¨ ν΄λμ€μ λ©μλ");
}
}
class A extends B {
void display() {
System.out.println("μμ ν΄λμ€μ λ©μλ");
}
}
public class Main {
public static void main(String[] args) {
B b1 = new B();
b1.display(); // μ€νκ²°κ³Ό: λΆλͺ¨ ν΄λμ€μ λ©μλ
A a = new A();
a1.display(); // μ€νκ²°κ³Ό: μμ ν΄λμ€μ λ©μλ
B b2 = new A();
b2.display(); // A a2 = new B();
//μ€νκ²°κ³Ό: μμ ν΄λμ€μ λ©μλ
}
}
β‘οΈ μμ μμ μμ μΈ λ²μ§Έμ κ°μ μΈμ€ν΄μ€ μ°Έμ‘°κ° κ°λ₯ν μ΄μ λ λ€νμ±(polymorphism) λλ¬Έμ΄λ€.
νλ μ΄μμ μΆμ λ©μλλ₯Ό ν¬ν¨νλ ν΄λμ€λ₯Ό μΆμ ν΄λμ€(Abstract Class)λΌκ³ νλ€.
μΆμ ν΄λμ€λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ μ€μν νΉμ§μΈ λ€νμ±μ κ°μ§λ λ©μλμ μ§ν©μ μ μν μ μλλ‘ ν΄μ€λ€.
μΆμ ν΄λμ€λ λμμ΄ μ μλμ΄ μμ§ μμ μΆμ λ©μλλ₯Ό ν¬ν¨νκ³ μμΌλ―λ‘ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.
λ¨Όμ μμμ ν΅ν΄ μμ ν΄λμ€λ₯Ό λ§λ€κ³ , μμ ν΄λμ€μμ μΆμ ν΄λμ€μ λͺ¨λ μΆμ λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν΄μΌ μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.
abstract class ν΄λμ€λͺ
{ abstract λ°ννμ
λ©μλλͺ
(); }
abstract class Animal { abstract void sound(); }
class Cat extends Animal {
void sound() {
System.out.println("λ―ΈμΌμΉ");
}
}
class Dog extends Animal {
void sound() {
System.out.println("λ©λ©");
}
}
public class Main {
public static void main(String[] args) {
Cat c = new Cat();
c.sound(); // μ€νκ²°κ³Ό: λ―ΈμΌμΉ
Dog d = new Dog();
d.sound(); // μ€νκ²°κ³Ό: λ©λ©
}
}
β‘οΈ μΆμ ν΄λμ€λ μΆμ λ©μλκ° ν¬ν¨λ ν΄λμ€λ₯Ό μμ λ°λ μμ ν΄λμ€κ° λ°λμ μΆμ λ©μλλ₯Ό ꡬννλλ‘ νκΈ° μν΄ μ¬μ©λλ€.
π‘ λ©μλ λμ€ν¨μΉλ μ΄λ€ λ©μλλ₯Ό νΈμΆν μ§ κ²°μ νμ¬ μ€μ λ‘ μ€νμν€λ κ³Όμ μ΄λ€. μλ°λ λ°νμ μμ κ°μ²΄λ₯Ό μμ±νκ³ , μ»΄νμΌ μμλ μμ±ν κ°μ²΄ νμ μ λν μ λ³΄λ§ λ³΄μ νλ€. λ€μ΄λλ―Ή λ©μλ λμ€ν¨μΉλ μ»΄νμΌλ¬κ° μ»΄νμΌ λ¨κ³μμ μ΄λ€ λ©μλλ₯Ό νΈμΆν μ§ λͺ¨λ₯΄λ κ²½μ° μ΄λ€. λ°λΌμ, λ°νμ μμ μ ν λΉλ κ°μ²΄μ νμ μ λ³΄κ³ λ©μλλ₯Ό μ€ννλ€.
π‘ finalμ μ€μ§ ν λ²λ§ ν λΉν μ μλ entityλ₯Ό μ μν λ μ¬μ©λλ€. finalλ‘ μ μΈλ λ³μκ° ν λΉλλ©΄ νμ κ°μ κ°μ κ°μ§λ€.
β‘οΈ λ§μ½ final λ³μκ° κ°μ²΄λ₯Ό μ°Έμ‘°νκ³ μλ€λ©΄, κ·Έ κ°μ²΄μ μνκ° λ°λμ΄λ final λ³μλ λ§€λ² λμΌν λ΄μ©μ μ°Έμ‘°νλ€.
π‘ finalλ‘ μ μΈν ν΄λμ€λ μ΅μ’ μνκ° λμ΄λ²λ¦¬κΈ° λλ¬Έμ μμμ ν μ μλ€.
β‘οΈ μ΄λ 보μμ΄λ ν¨μ¨μ±μ μΈ‘λ©΄μμ μ₯μ μ΄ μλ€.
π‘ λΆλͺ¨ ν΄λμ€μ final νμ μ λ©μλκ° μμΌλ©΄ μμ ν΄λμ€λ κ·Έ λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν μ μλ€.
π‘ final λ³μλ κ°μ ν λ² ν λΉνλ©΄ μμ ν μ μλ€. μ΄κΈ°νλ λ¨ ν λ²λ§ κ°λ₯νλ€. λ¨Όμ μ μΈνκ³ κ°κ° λ€λ₯Έ κ°μ κ°μ§λλ‘ μ΄κΈ°ν ν μλ μμ§λ§ μ΄νμ μμ μ λΆκ°λ₯νλ€. μ΄λ¬ν ννλ₯Ό blank final λ³μλΌκ³ νλ€.
final λ³μ : λ©λͺ¨λ¦¬μ ν¨μ¨μ±μ λμ΄κΈ° μν΄ static λ³μμ κ°μ΄ μμ£Ό μ°μΈλ€.
blank final λ³μ : μΈμ€ν΄μ€λ§λ€ λ€λ₯Έ κ°μ κ°μ§κΈ° λλ¬Έμ staticκ³Ό ν¨κ» μ°μ΄μ§ μλλ€.
μλ°μ ν΄λμ€λ₯Ό μ μΈν λ extends ν€μλλ‘ λ€λ₯Έ ν΄λμ€λ₯Ό μμνμ§ μμΌλ©΄ java.lang.Object ν΄λμ€λ₯Ό μμνκ² λλ€. λ°λΌμ, μλ°μ λͺ¨λ ν΄λμ€λ Object ν΄λμ€μ μμμ΄κ±°λ μμμΈ ν΄λμ€κ° λλ€. μλ°μ μ΅μμ λΆλͺ¨ ν΄λμ€μ ν΄λΉνλ μ μ΄λ€.
β‘οΈ Object ν΄λμ€λ νλκ° μκ³ λ©μλλ‘ κ΅¬μ±λμ΄ μλ€. μ΄ λ©μλλ€μ λͺ¨λ ν΄λμ€μμ μ¬μ©ν μ μλ€.
| λ©μλ | μ€λͺ |
|---|---|
| boolean equals(Object obj) | λ κ°μ²΄κ° κ°μμ§ λΉκ΅νλ€. |
| String toString() | κ°μ²΄μ λ¬Έμμ΄μ λ°ννλ€. |
| protected Object clone() | κ°μ²΄λ₯Ό 볡μ¬νλ€. |
| protected void finalize() | κ°λΉμ§ 컬λ μ μ§μ μ κ°μ²΄μ 리μμ€λ₯Ό μ 리ν λ νΈμΆνλ€. |
| Class getClass() | κ°μ²΄μ ν΄λμ€νμ λ°ννλ€. |
| int hashCode() | κ°μ²΄μ μ½λκ°μ λ°ννλ€. |
| void notify() | waitλ μ€λ λ μ€νμ μ¬κ°ν λ νΈμΆνλ€. |
| void notifyAll() | waitλ λͺ¨λ μ€λ λ μ€νμ μ¬κ°ν λ νΈμΆνλ€. |
| void wait() | μ€λ λλ₯Ό μΌμμ μΌλ‘ μ€μ§ν λ νΈμΆνλ€. |
| void wait(long timeout) | μ£Όμ΄μ§ μκ°λ§νΌ μ€λ λλ₯Ό μΌμμ μΌλ‘ μ€μ§ν λ νΈμΆνλ€. |
| void wait(long timeout, int nanos) | " |