public class Inheritance008 {
public static void main(String[] args) {
// TODO Auto-generated method stub
PP t1 = new PP(); //์๊ธฐ์์
t1.m1();
t1.m2();
//t1.m3(); //m3์ CC๊บผ! X
CC t2 = new CC(); //์๊ธฐ์์
t2.m1();
t2.m2();
t2.m3(); //m3์ CC๊บผ! O
PP t3 = new CC(); //PP:m1,m2 = CC: (PP)m1,m2 (CC)m2,m3 -> CC๊ฐ์ฒด์์ฑํด์ PP์ ๋ด๋๋ค
t3.m1();
t3.m2(); //CC์ m2๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค
//t3.m3(); //PP๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ง ์ฌ์ฉ๊ฐ๋ฅ!
//CC t4 = t3; //PP์ ๋ด๊ฒจ์ ธ์๋ CC๊ฐ์ฒด t3๋ฅผ ์์ CC์ ๋ด์ง ๋ชปํ๋ค!
PP t4 = t3; //PP์ ๋ด๊ฒจ์ ธ์๋ CC๊ฐ์ฒด t3๋ฅผ ๋ถ๋ชจ PP์ ๋ด์ ์ ์์ง
t4.m1();
t4.m2(); //CC์ m2๋ฅผ ๊ฐ์ ธ์จ๋ค
//t4.m3(); //PP๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ!
PP t5 = t2; //CC์ ๋ด๊ฒจ์ ธ ์๋ CC๊ฐ์ฒด t2๋ฅผ PP์ ๋ด์ ์ ์๋ค
t5.m1();
t5.m2(); //CC์ m2๋ฅผ ๊ฐ์ ธ์จ๋ค
//t5.m3(); //PP๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ!
CC t6 = (CC)t3; //PP์ ๋ด๊ฒจ์ ธ์๋ CC๊ฐ์ฒด t3๋ฅผ CC์ ๋ด์ ์ ์์ง ๋ถ๋ชจ->์์ X
//๊ทผ๋ฐ!!! ์ด๋ ๋ชธํต๋ง ๊ฐ๋ค๋ฉด ๊ฐ์ ํ๋ณํ์ ํด์ ๋ฃ์ ์ ์๋ค!!!
//CC์ ๋ด๊ฒจ์ ธ ์๋ CC๊ฐ์ฒด t3
// -> CC : (PP)m1,m2 , (CC)m2,m3 = CC : (PP)m1,m2 , (CC)m2,m3
t6.m1();
t6.m2(); //CC์ m2๋ฅผ ๊ฐ์ ธ์จ๋ค
t6.m3(); //CC์ m3 ์ฌ์ฉ ๊ฐ๋ฅ!
//CC t7 = (CC)t1; //PP์ ๋ด๊ฒจ์ ธ ์๋ PP๊ฐ์ฒด t1์ CC์ ๋ด์ ์ ์์ด ๋ถ๋ชจ->์์ X
// ์ฌ๊ธฐ์ ๊ฐ์ ํ๋ณํ์ ํ๋ฉด ๋์ผํ๋๋ฐ ์๋จ..
// t1์ ๋ชธํต์ PP์ด๊ธฐ ๋๋ฌธ์ CC๋ก ๊ฐ์ ํ๋ณํ์ ํ๋ ค๋ฉด ๋ชธํต์ด CC์ฌ์ผํ๋๋ฐ ์๋๊ธฐ ๋๋ฌธ์!
}
class PP {
void m1() {}
void m2() {}
}
class CC extends PP {
void m2() {}
void m3() {}
}
class DD extends PP {
void m4() {}
}
๐PP t4 = t3;
-> PP์ ๋ด๊ฒจ์ ธ์๋ CC๊ฐ์ฒด t3๋ PP์ ๋ค์ด๊ฐ์์ผ๋๊น PP์ ๋ด๊ธธ ์ ์๋ค. (PP -> PP OOOO)
๐CC t6 = (CC)t3;
-> PP์ ๋ด๊ฒจ์ ธ์๋ CC๊ฐ์ฒด t3๋ CC์ ๋ด๊ธธ ์ ์๋ค. (pp -> CC XXXX)
-> ๊ทธ๋์ ๊ฐ์ ํ๋ณํ์ ํด์ CC์ ๋ด๊ธธ ์ ์๋๋ก ํ๋ค.
-> ์ด๋ CC์ ๋ด๊ธฐ๊ฒ ํ๋ ค๋ฉด ๋ชธํต์ด CC์ฌ์ผ ํ๋ค!
=================================================
import java.util.ArrayList;
public class Inheritance008 {
public static void main(String[] args) {
// TODO Auto-generated method stub
CC w1 = new CC(1);
DD w2 = new DD(2);
//m1 m2
//CC -> m3
//DD -> m4
ArrayList<PP> pList = new ArrayList<PP>();
pList.add(w1); //CC 1
pList.add(w2); //DD 2
pList.add( new PP(3) ); //PP 3
pList.add( new CC(4) ); //CC 4
pList.add( new DD(5) ); //DD 5
for (PP p : pList) {
System.out.println(p.id);
p.m1();
p.m2();
//์ด๋๋ ๋ถ๊ฐ๋ฅ!
// ( (CC)p ).m3(); //๊ฐ์ ํ๋ณํ ํด์ CC์ ์๋ m3 ์ฌ์ฉ O
// ( (DD)p ).m4(); //๊ฐ์ ํ๋ณํ ํด์ DD์ ์๋ m4 ์ฌ์ฉ X -> ์์ ์ฝ๋๋ก ๋ชธํต์ด CC์ธ ์ํ
//instanceof ๋ก ๊ฐ๊ฐ ๋ฐ๋ก๋ด์ ์ด๋ ๊ฐ๋ฅ!
if ( p instanceof CC) { //if์ ๊ฐ๊ฐ๋ฐ๋ก๋ณธ๋ค! -> CC์ถ์ ์ด๋?
( (CC)p ).m3();
}
if ( p instanceof DD) { //if์ ๊ฐ๊ฐ๋ฐ๋ก๋ณธ๋ค! -> DD์ถ์ ์ด๋?
( (DD)p ).m4();
}
// p.m3(); // CC DD๊ฐ ๋ชธํต์ด์ง๋ง PP์ ์๋๊ฑฐ๋ง ์ฌ์ฉ๊ฐ๋ฅ
}
}
}
class PP {
//ํ๋
int id;
//์์ฑ์
public PP(int id) {
this.id = id;
}
//๋ฉ์๋
void m1() {
System.out.println(id + " m1");
}
void m2() {
System.out.println(id + " m2");
}
}
class CC extends PP {
//์์ฑ์
public CC(int id) {
super(id);
}
void m2() {
System.out.println(id + " new m2");
}
void m3() {
System.out.println(id + " m3");
}
}
class DD extends PP {
//์์ฑ์
public DD(int id) {
super(id);
}
void m4() {
System.out.println(id + " m4");
}
}
๐ป
w1 ์์ฑ (id : 1)
w2 ์์ฑ (id : 2)
pList ์์ฑ
w1 (CC 1)
w2 (DD 2)
PP 3
CC 4
DD 5
for๋ฌธ์ผ๋ก pList์ ์๋ ๊ฒ๋ค ์ฐจ๋ก๋๋ก ๋ค ๋๋ฆผ
w1 (CC 1) -> 1 / 1 m1 / 1 new m2 / 1 m3
w2 (DD 2) -> 2 / 2 m1 / 2 m2 / 2 m4
PP 3 -> 3 / 3 m1 / 3 m2
CC 4 -> 4 / 4 m1 / 4 new m2 / 4 m3
DD 5 -> 5 / 5 m1 / 5 m2 / 5 m4