day30

์ƒ์€๐Ÿ‘ธยท2023๋…„ 11์›” 27์ผ
0

๋šœ๋ฒ…๋šœ๋ฒ… ์ฒซ๋ฒˆ์งธ

๋ชฉ๋ก ๋ณด๊ธฐ
24/26
post-thumbnail

๐Ÿ“–์ƒ์†- ๊ฐ•์ œํ˜•๋ณ€ํ™˜

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");
	}
}

๐Ÿ’ป

  1. w1 ์ƒ์„ฑ (id : 1)
    w2 ์ƒ์„ฑ (id : 2)

  2. pList ์ƒ์„ฑ
    w1 (CC 1)
    w2 (DD 2)
    PP 3
    CC 4
    DD 5

  3. 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

profile
๋’ค์ฃฝ๋ฐ•์ฃฝ ๋ฒจ๋กœ๊ทธ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด