π μ± μκ°νκΈ°
λ΄κ° μ¬μ©ν μλ°μμ μ 볡 μ±
λ§ν¬!
γ΄ κΉλν μ§μ, μ΄μ§μ€νΌλΈλ¦¬μ±
μ΄ μ± μ κ³ λ₯΄κ² λ μ΄μ λ μΉκ΅¬μ μΆμ²μ΄μλ€. κ΅μ₯ν κΌΌκΌΌνκ² μ νμμ΄ μ΄ν΄νκΈ° μ½λ€λ μ΄μ λ‘ μΉκ΅¬λ μ΄ μ± μ 골λλ€κ³ νλ€. λλ κ·Έλμ κ·Έλ₯ λ°λΌμλ€. μ€μ λ‘ μ± μ μ΄ν΄λ³΄λ κ΅μ₯ν κΌΌκΌΌνκ² μ 리λμ΄μλ€. λ€λ₯Έ μ± μ λ³Έ μ μ΄ μμ΄ λΉκ΅κ° λΆκ°νμ§λ§, λ΄ μκ°μΌλ‘ μ²μ μλ°λ₯Ό 곡λΆνλ€λ©΄ μ΄ μ± μ κ°μ§κ³ μΆ©λΆν λ°λΌκ° μ μμ λ― νλ€. λͺ¨λλ€ νμ΄ν !!
π°
βοΈ μμ_ 307p
• μμ
: λΆλͺ¨ ν΄λμ€μ λ©€λ²(νλ, λ©μλ, μ΄λ ν΄λμ€)λ₯Ό λ΄λ €λ°μ μμ ν΄λμ€ λ΄λΆμ ν¬ν¨μν€λ μλ° λ¬Έλ² μμ
class Human {
String name;
int age;
void eat() {}
void sleep() {}
}
class Student extends Human {
int studentID;
void goToSchool() {}
}
Human h = new Human();
h.name = "κΉμλ°";
h.age = 1;
h.eat;
Student s = new Student();
s.name = "κΉμμ ";
s.age = 2;
s.studentID = 12;
ν΄λμ€λ₯Ό μμν λλ extends ν€μλλ₯Ό μ¬μ©νλ©°, ν΄λμ€λͺ λ€μμ extends λΆλͺ¨ ν΄λμ€λͺ (extends Human)μΌλ‘ νκΈ°νλ©΄ λλ€. Student ν΄λμ€λ Human ν΄λμ€μ μλ νλμ λ©μλλ₯Ό μΆκ°μ μΌλ‘ ꡬμ±νλ©΄ λλλ°, μ΄λ₯Ό ν΅ν΄ μ½λμ μ€λ³΅μ±μ μ κ±°νλ μ₯μ μ΄ μλ€. λν 'νμμ νμμ΄λ€.' λ§κ³ 'νμμ μ¬λμ΄λ€.' λΌλ λ§μ΄ μΆκ°λλ©΄μ λ€νμ ννμ΄ κ°λ₯ν΄μ§λ€. λ€νμ±μ΄λ, 1κ°μ κ°μ²΄λ₯Ό μ¬λ¬ κ°μ§ λͺ¨μμΌλ‘ νννλ κ²μ΄λ€. 'μ¬λμ νμμ΄λ€.' λΌλ λ§μ μ΄ν΄λ³΄λ©΄ μ΄λ μ³μ§ μλ€λ κ±Έ μ μ μλ€. μμμ΄ λ€νμ±μ΄λ μ₯μ μ κ°μ§μ§λ§ 'μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€λ€.' λΌλ λ§μ΄ μ±λ¦½λμ§ μμ μ μμΌλ μ μν΄μΌνλ€.
Student ν΄λμ€λ νλ 3κ°, λ©μλ 3κ°λ₯Ό κ°μ§κ² λλ€.
Q. μ½λμ μ€λ³΅ μ κ±°λ₯Ό μν΄ μμμ μ¬μ©νλ κ²μ΄ λ ν¨μ¨μ μΌκΉ?
A. κ·Έκ²μ μλλ€. μ½λμ μ€λ³΅μ μ κ±°νλ κ²λ³΄λ€ μμμ μ¬μ©νλ κ²μ΄ νλ‘μ νΈλ₯Ό λ 볡μ‘νκ² λ§λ€ μ μλ€. μ€νλ € κ°λ¨ν μ½λμ κ²½μ° κ°κ°μ ν΄λμ€μ λ£μ΄ μμ±νλ κ²μ΄ ν¨μ¨μ μ΄κ³ λΉ λ₯Ό μ μλ€.
• λ€μ€ μμ
class B {
int data = 3;
}
class C {
int data = 4
}
class A extends B, C {
...
}
A a = new A();
System.print.out(a.data);
μλ°λ λ€μ€μμμ μ§μνμ§ μλλ€. κ·Έ μ΄μ λ ν΄λμ€ Bμ ν΄λμ€ Cμ data νλλ₯Ό ν¬ν¨νκ³ μμΌλ A μ μ₯μμ μ΄λ dataλ₯Ό κ°μ ΈμμΌν μ§ νΌλνκΈ° λλ¬Έμ΄λ€. μ¦ λͺ¨νΈμ±μ λ°μμν€κΈ° λλ¬Έμ λ€μ€μμμ νμ©νμ§ μλλ€.
• μμν λμ λ©λͺ¨λ¦¬ ꡬ쑰
class A {
int m;
void abc() {}
}
class B extends A {
int n;
void bcd() {}
}
B b = new B();
μμ ν΄λμ€μ λΆλͺ¨ ν΄λμ€λ JVMμ μν΄ λ‘λ©λλλ°, μ΄κ²μ ν΄λμ€ λ‘λ©μ΄λΌκ³ νλ€. μ΄μ ν΄λμ€κ° λ‘λ©λλ©΄ λ©μλ μμμ ν΄λμ€μ λν μ 보λ₯Ό μ μ₯νλ€. κ·Έ ν μ€μ κ°μ²΄λ ν λ©λͺ¨λ¦¬μ μμ±λλ€. μ²μμ λΆλͺ¨ ν΄λμ€ κ°μ²΄λ₯Ό μμ±νκ³ κ·Έ ν μμ ν΄λμ€μμ μΆκ°ν νλμ λ©μλκ° κ°μ²΄μ μΆκ°λλ€. μ¦, μμ ν΄λμ€ κ°μ²΄μ λ΄λΆμ λΆλͺ¨ ν΄λμ€ κ°μ²΄κ° ν¬ν¨λλ€.
μ°Έμ‘° λ³μ bλ B νμ μΌλ‘ μ μΈλλ€. κ·Έλ κΈ°μ B νμ κ°μ²΄λ§μ κ°λ¦¬ν¬ μ μλλ°, κ°μ²΄ B μμλ λΆλͺ¨ ν΄λμ€λ ν¨κ» μ‘΄μ¬νκΈ° λλ¬Έμ μμ ν΄λμ€ κ°μ²΄μμ λΆλͺ¨ ν΄λμ€μ λ©€λ²λ₯Ό μ¬μ©ν μ μκ² λλ€.
• μμ±μμ μμ μ¬λΆ
class A {
A() {
}
}
class B extends A {
}
μμ±μλ μμ ν΄λμ€μΈ B ν΄λμ€μ μμλμ§ μλλ€. κ·Έ μ΄μ λ μμ±μλ₯Ό ν΄λμ€ Bκ° μμνκ²λλ©΄ ν΄λμ€λͺ κ³Ό μμ±μλͺ μ΄ λ¬λΌμ§λ©΄μ μμ±μκ° λ μ μλ€. λ©μλκ° λκΈ° μν΄μ λ¦¬ν΄ νμ μ μ ν΄μΌνλλ°, λ¦¬ν΄ νμ λ μμ΄μ λ©μλκ° λ μ μλ€. κ²°κ΅ μμ ν΄λμ€κ° μμ±μλ₯Ό λ°κ²λλ©΄ μ€λ₯κ° λ°μνκ²λλ€.
βοΈ μ μΊμ€ν κ³Ό λ€μ΄μΊμ€ν _ 319p
• μΊμ€ν
: λ±νΈλ₯Ό μ€μ¬μΌλ‘ νμ μΌμͺ½κ³Ό μ€λ₯Έμͺ½μ μλ£νμ΄ μΌμΉν΄μΌνλλ°, μλ£νμ΄ λ€λ₯Έ κ²½μ° νμ μ λ³νν΄μ£Όλ κ²μ μλ―Ένλ€.
• μ μΊμ€ν
: λ²μκ° μ’μ μͺ½μμ λμ μͺ½μΌλ‘ μΊμ€ν λλ€. (μμ ν΄λμ€μμ λΆλͺ¨ ν΄λμ€λ‘ λ³ν)
class A {}
class B extends A {}
class C extends B {}
B b1 = new B();
A a1 = b1;
C c2 = new C();
B b2 = (B) c2;
μ μΊμ€ν μ μ»΄νμΌλ¬κ° μλμΌλ‘ νμ μ λ³νν΄μ€λ€. κ·Έλμ A a1 = (A) b1;μΌλ‘ μ μ§ μμλ (A)λ₯Ό μ»΄νμΌλ¬κ° μμμ μΆκ°νλ€. ν΄λμ€ Aλ ν΄λμ€ Bλ₯Ό μμνλ€. ν΄λμ€ Bλ ν΄λμ€ Cλ₯Ό μμνλ€. κ·Έλ¬λ©΄ b1μ Aνμ μΌλ‘ λ³νν μ μλ€. κ·Έλ¦¬κ³ Cλ Bμ Aλ‘ νμ μ λ³νν μ μλ€.
μ’ λ μ½κ² μ€λͺ νμλ©΄ A ν΄λμ€κ° μ¬λ, B ν΄λμ€κ° νμμ΄λΌκ³ κ°μ νλ€λ©΄ 'νμμ μ¬λμ΄λ€.'λ μΈμ λ λ§λ λ§μ΄λ μ μΊμ€ν μ΄ κ°λ₯ν κ²μ΄λ€.
• λ€μ΄μΊμ€ν
: λ²μκ° λμ μͺ½μμ μ’μ μͺ½μΌλ‘ μΊμ€ν λλ€. (λΆλͺ¨ ν΄λμ€μμ μμ ν΄λμ€λ‘ λ³ν)
class A {}
class B extends A {}
class C extends B {}
A a1 = new A();
B b1 = (B) a1;
A a2 = new B();
B b2 = (B) a2;
C c2 = (C) a2;
Aνμ μΈ μμ±μ a1μ Bνμ μΌλ‘ λ€μ΄ μΊμ€ν λ μ μλ€. μλνλ©΄ ν΄λμ€ Aλ ν΄λμ€ Bλ Cλ₯Ό μμνκ³ μμ§ μλ€. κ·Έλ¬λ―λ‘ B b1= (B) a1;μ μ€λ₯κ° λ°μνλ€.
μμ±μ a2λ₯Ό μ΄ν΄λ³΄μ. μ¬κΈ°μ μ°Έμ‘° λ³μ νμ κ³Ό μ€μ κ°μ²΄ νμ μ΄ λμΌνμ§ μλ€. μ°Έμ‘° λ³μ νμ μ Aκ° λκ³ μ€μ κ°μ²΄ νμ μ Bκ° λλ€. λ©λͺ¨λ¦¬λ‘ μ΄ν΄λ³΄λ©΄ Bλ A ν΄λμ€λ₯Ό μμνλ―λ‘ ν λ©λͺ¨λ¦¬μ μ΄λ―Έ Bνμ μμ Aνμ μ΄ μλ ννμΌ κ²μ΄λ€. κ²°κ΅ μ€μ κ°μ²΄ νμ μ Bκ° λλ©΄μ, a2λ B κ°μ²΄λ₯Ό κ°λ¦¬ν€κ² λλ€. κ·Έλ¬λ―λ‘ a2λ Bνμ μΌλ‘ λ€μ΄ μΊμ€ν μ΄ κ°λ₯νλ€.
κ·Έλ¬λ©΄ c2λ₯Ό μ΄ν΄λ³΄μ. ν΄λμ€ Bλ ν΄λμ€ Cλ₯Ό μμνμ§ μλλ€. ν λ©λͺ¨λ¦¬μ Cνμ κ°μ²΄κ° μ‘΄μ¬νμ§ μλλ€. (λ§λ€μ΄μ§ μ μ΄ μκΈ° λλ¬Έμ) κ·Έλ κΈ°μ ClassCastExceptionμ λ°μμν¨λ€.
κ²°λ‘ μ μΌλ‘ λ€μ΄μΊμ€ν μ μ°Έμ‘° λ³μ νμ λ³΄λ€ μ€μ κ°μ²΄ νμ μ μ€μ μ λλ€. μ€μ κ°μ²΄ νμ μ΄ μ΄λ ν΄λμ€λ₯Ό μμνλμ§μ λ°λΌ λ€μ΄μΊμ€ν μ μ¬λΆκ° κ²°μ λλ€.
Q. μ°Έμ‘° λ³μ νμ κ³Ό μ€μ κ°μ²΄ νμ μ μ°¨μ΄μ μ?
A. μ°Έμ‘° λ³μ νμ μ μ»΄νμΌ μμ μ μν₯μ λ―ΈμΉλ€. μ°Έμ‘° λ³μ νμ μ λ°λΌ νΈμΆ κ°λ₯ν λ©μλμ μ κ·Ό κ°λ₯ν νλμ μ νμ΄ μκΈ°λλ°, μ μ λ°μΈλ©μΌλ‘ λμνλ€. μμ νμ μΌλ‘ μ μΈν κ²½μ° μμ ν΄λμ€μ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ€. (λ€νμ±)
new ν€μλλ₯Ό ν΅ν΄ μμ±λ κ°μ²΄ νμ μΌλ‘ λ°νμ μμ μ μν₯μ λ―ΈμΉλ€. μ€μ κ°μ²΄ νμ μ λ°λΌ λμμ μν₯μ λ―ΈμΉλλ° λμ λ°μΈλ©μΌλ‘ λμνλ€. (μΊμ€ν )
βοΈ νμ μ λ°λ₯Έ μ°¨μ΄μ _323p (λ΄μ© λ€λ¦)
• μ€μ κ°μ²΄ νμ
: λ°νμ μμ μ μν₯μ μ£Όλ©°, λμ λ°μΈλ©μΌλ‘ λμνλ€.
• Cat νμ , Cat μμ±μ
interface Animal {
void sound();
}
class Cat implements Animal {
@Override
public void sound() {
System.out.println("Meow");
}
public void scratch() {
System.out.println("Cat is scratching");
}
}
public class Main {
public static void main(String[] args) {
Cat a2 = new Cat();
a2.sound();
a2.scratch();
}
}
μμ±μ a2λ μ°Έμ‘° λ³μ νμ κ³Ό μ€μ κ°μ²΄ νμ μ΄ CatμΌλ‘ λμΌνλ€. μ΄λ° κ²½μ° a2λ Catμ μλ λ©μλλ₯Ό μ¬μ©ν΄μΌνλ€. κ·Έλ κΈ°μ sound κ°μ "Meow"κ° λ κ²μ΄λ€. scratchλ μ μ€νλμ΄ "Cat is scratching"μΌλ‘ μΆλ ₯λ κ²μ΄λ€.
• Animal νμ , Cat μμ±μ
interface Animal {
void sound();
}
class Cat implements Animal {
@Override
public void sound() {
System.out.println("Meow");
}
public void scratch() {
System.out.println("Cat is scratching");
}
}
public class Main {
public static void main(String[] args) {
Animal a2 = new Cat();
a2.sound();
a2.scratch();
}
}
μ€λ²λΌμ΄λ©λ λ©μλλ₯Ό μ΄ν΄λ³Ό κ²μ΄λ€. μΈν°νμ΄μ€μΈ Animalμ μμνλ Cat ν΄λμ€λ sound( ) λ©μλλ₯Ό κ°μ‘μ§λ§, Animal μΈν°νμ΄μ€λ λκ°μ΄ sound( ) λ©μλκ° μλ€.
μ°Έμ‘° λ³μ νμ μ Animalμ΄κ³ μ€μ κ°μ²΄ νμ μ CatμΈ μμ±μ a2λ sound( )λ©μλμ scratch( )λ©μλλ₯Ό νΈμΆνκ³ μ νλ€. μ΄λ sound λ©μλλ μ€λ²λΌμ΄λ©μ΄ λμ΄ Catμ sound λ©μλκ° νΈμΆλμ΄ (λμ λ°μΈλ©) "Meow"κ° μΆλ ₯λ κ²μ΄λ€. κ·Έλ°λ° Animal ν΄λμ€μλ scratch λ©μλκ° μ‘΄μ¬νμ§ μμλ€. κ·Έλ κΈ°μ Animal νμ μΈ a2λ scratch λ©μλλ λΆλ¬μ¬ μ μλ€.
• μ°Έμ‘° λ³μ νμ
: μ»΄νμΌ μμ μ μν₯μ μ£Όλ©°, μ μ λ°μΈλ©μΌλ‘ λμνλ€.
interface Animal {
void sound();
}
class Cat implements Animal {
@Override
public void sound() {
System.out.println("Meow");
}
public void scratch() {
System.out.println("Cat is scratching");
}
}
public class Main {
public static void main(String[] args) {
Animal a2 = new Cat();
a2.sound();
Cat a = (Cat) a2;
a.scratch();
}
}
μμ μ½λμμ a2.scratchλ μ€λ₯κ° λ°μνλ€. κ·Έλ λ€λ©΄ μ€λ₯κ° λ°μνμ§ μκ² νκΈ° μν΄μλ μμ±μ a2λ₯Ό λ€μ΄μΊμ€ν ν΄μ£Όλ©΄ λλ€. a2κ° Animal νμ μ κ°μ§κ³ μμ΄μ Animalμ μλ λ©μλλ§ μ€νκ°λ₯νλ€. κ·Έλ¬λ©΄ a2λ₯Ό Cat νμ μΌλ‘ λ°κΏμ£Όλ©΄ λλ€. μ°Έμ‘° λ³μ νμ μ λ³κ²½νκΈ° μν΄ λ€μ΄μΊμ€ν μ ν΄μ€¬λ€. κ·Έλ¬λ©΄ scratch λ©μλλ₯Ό μ¬μ©ν μ μλ€.
βοΈ instanceof_ 326p
• instanceof
: μΊμ€ν κ°λ₯ μ¬λΆλ₯Ό λΆλ¦¬μΈ νμ μΌλ‘ νμΈν μ μλ€.
C c = new C();
System.out.println(c instanceof A);
[ μ°Έμ‘° λ³μ instanceof νμ ] νμμΌλ‘ μ°μ΄λ©°, μΊμ€ν μ΄ κ°λ₯νλ©΄ trueλ‘ λΆκ°λ₯νλ©΄ falseλ‘ νμΈν μ μλ€. instanceof ν€μλλ₯Ό μ¬μ©νλ©΄ μμ κ΄κ³λ κ°μ²΄λ₯Ό λ§λ μμ±μλ₯Ό μ§μ νμΈνμ§ μκ³ λ μΊμ€ν κ°λ₯ μ¬λΆλ₯Ό νμΈν μ μλ€.