day29

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

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

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

๐Ÿ“–์ƒ์†

๐Ÿšจ์ƒ์†๊ด€๊ณ„์—์„œ ์ž์‹์ƒ์„ฑ์ž์—๋Š” ๋ฌด์กฐ๊ฑด ๋ถ€๋ชจ์ƒ์„ฑ์ž ํ˜ธ์ถœ์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค!

๐Ÿšจ์ž์‹์ƒ์„ฑ์ž๋ฅผ ํƒ€๋ผ๊ณ  ํ–ˆ์„๋•Œ ๋ถ€๋ชจ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์„๋•Œ ์ž์‹์ƒ์„ฑ์ž ์•ˆ์— super();๊ฐ€ ์ƒ๋žต ๋˜์–ด ์žˆ๋‹ค!
๋งค๊ฐœ๋ณ€์ˆ˜์—†๋Š” ๋ถ€๋ชจ์ƒ์„ฑ์ž super();๋ถ€ํ„ฐ ํƒ€์•ผํ•œ๋‹น

class SuperClass {
	public SuperClass() { // ๋ถ€๋ชจ ์ƒ์„ฑ์ž
		System.out.println("๋ถ€๋ชจ ์ƒ์„ฑ์ž ํ˜ธ์ถœ");
	}
}

class SubClass extends SuperClass{
	public SubClass() { // ์ž์‹ ์ƒ์„ฑ์ž
		System.out.println("์ž์‹ ์ƒ์„ฑ์ž ํ˜ธ์ถœ");
	}
}

public class InheritanceConstructorEx01 {
	public static void main(String[] args) {
		SubClass sc = new SubClass(); // ์ž์‹ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
	}
}

๐Ÿ’ป
๋ถ€๋ชจ ์ƒ์„ฑ์ž ํ˜ธ์ถœ
์ž์‹ ์ƒ์„ฑ์ž ํ˜ธ์ถœ

=>

class SubClass extends SuperClass{
	public SubClass() { // ์ž์‹ ์ƒ์„ฑ์ž
		System.out.println("์ž์‹ ์ƒ์„ฑ์ž ํ˜ธ์ถœ");
	}
}

=> ์ž์‹ ์ƒ์„ฑ์ž ์•ˆ์— super();๊ฐ€ ์ƒ๋žต ๋˜์–ด์žˆ๋Š” ์ƒํƒœ! ๊ทธ๋ž˜์„œ ๋ถ€๋ชจ ์ƒ์„ฑ์ž ๋ถ€ํ„ฐ ํƒ„๋‹ค!

๐Ÿšจ์ž์‹ ํด๋ž˜์Šค๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์ ์œผ๋กœ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋Š” ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.
์ด๋•Œ๋Š” ์ž์‹์ƒ์„ฑ์ž์— super(); ๋ผ๊ณ  ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๋œฌ๋‹ค ๋ถ€๋ชจ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—!
๋”ฐ๋ผ์„œ ์ด๋•Œ๋Š” ์ƒ๋žตํ•˜์ง€๋ง๊ณ  super(๋งค๊ฐœ๋ณ€์ˆ˜); ๋ผ๊ณ  ํ˜ธ์ถœ์„ ๊ผญ ํ•ด์ค˜์•ผ ํ•œ๋‹ค

class SuperClass {
	public SuperClass(String str){
		System.out.println(str + "ํ˜ธ์ถœ");
	}
}

class SubClass extends SuperClass{
	public SubClass() { // ์ž์‹ ์ƒ์„ฑ์ž
		System.out.println("์ž์‹ ์ƒ์„ฑ์ž ํ˜ธ์ถœ");
	}
}

public class InheritanceConstructorEx01 {
	public static void main(String[] args) {
		SubClass sc = new SubClass(); // ์ž์‹ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
	}
}

=> ์ด๋•Œ๋Š” ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค! ์ž์‹์ƒ์„ฑ์ž์— super();๊ฐ€ ์ƒ๋žต์ด ๋˜์–ด์žˆ๋Š”๊ฑด๋ฐ.. ๋ถ€๋ชจํด๋ž˜์Šค์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—

class SubClass extends SuperClass{
	public SubClass() { // ์ž์‹ ์ƒ์„ฑ์ž
		super("๋ถ€๋ชจ ์ƒ์„ฑ์ž "); // ๋ถ€๋ชจ ์ƒ์„ฑ์ž ํ˜ธ์ถœ
		System.out.println("์ž์‹ ์ƒ์„ฑ์ž ํ˜ธ์ถœ");
	}
}

=> ์ด๋Ÿฐ์‹์œผ๋กœ super("๋ถ€๋ชจ ์ƒ์„ฑ์ž "); // ๋ถ€๋ชจ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์„ ํ•ด์ค˜์•ผ ์—๋Ÿฌ๋„ ์•ˆ๋œจ๊ณ  ๋ถ€๋ชจ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„๋•Œ๋Š” ์ž์‹ ์ƒ์„ฑ์ž์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ€๋ชจ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค

๐Ÿ“–์ƒ์† - ํƒ€์ž… ๋ณ€ํ™˜, ๋‹คํ˜•์„ฑ

public class Inheritance004 {
	
	public static void main(String[] args) {
		
		Parent p1 = new Parent(); //๋ถ€๋ชจ์ƒ์„ฑ
		
		Child c1 = new Child(); //์ž์‹์ƒ์„ฑ
		
		Parent p2 = new Child(); //์ž์‹๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ Parent์— ๋‹ด๊ฒ ๋‹ค OOO
		//๋ถ€๋ชจํƒ€์ž…		์ž์‹๊ฐ์ฒด
		Parent p3 = c1; //์ž์‹๊ฐ์ฒด๋ฅผ Parent์— ๋‹ด๊ฒ ๋‹ค OOO
		//๋ถ€๋ชจํƒ€์ž…    ์ž์‹๊ฐ์ฒด
		
//		Child c2 = new Parent(); //๋ถ€๋ชจ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ Child์— ๋‹ด๊ฒ ๋‹ค XXX
		
		GrandParent gp1 = new GrandParent();
		GrandParent gp2 = new Parent(); //๋ถ€๋ชจ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ GrandParent์— ๋‹ด๊ฒ ๋‹ค OOO
		GrandParent gp3 = new Child(); //์ž์‹๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ GrandParent์— ๋‹ด๊ฒ ๋‹ค OOO
	
	}
}

class GrandParent {
	
}

class Parent extends GrandParent {
	
}

class Child extends Parent {
	
}

๐Ÿ–
Parent p2 = new Child(); ๋‚˜๋ˆ ์„œ ๋ณด์ž!
Child๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ Parent์— ๋‹ด๊ฒ ๋‹ค๋Š” ๋œป! OOO

๐Ÿ–
Child c2 = new Parent();
๋ถ€๋ชจ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ž์‹์— ๋‹ด๊ฒ ๋‹ค๋Š”๊ฑด๋ฐ.. ๋ง์ด ์•ˆ๋˜์ž–์•„!?

๐Ÿ–
GrandParent gp2 = new Parent();
GrandParent gp3 = new Child();
๋ถ€๋ชจ,์ž์‹๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ํ• ์•„๋ฒ„์ง€์— ๋‹ด๊ฒ ๋‹ค OOO

public class Inheritance005 {
	
	public static void main(String[] args) {
		
		Parent2 p1 = new Parent2();
		p1.method1();
		p1.method2(); //๋ฉ”์ธ์ด ์žˆ๋Š”์ชฝ์€ ๋‹ค๋ฅธํด๋ž˜์Šค๋‹ˆ๊นŒ Parent2 ํด๋ž˜์Šค์˜ private ๋ชป์จ
//		p1.method3(); // X Parent์—๋Š” method3์ด ์—†๋‹ค / ์ž์‹๊บผ๋ฅผ ๊ฐ€์ง€๊ณ  ๋ถ€๋ชจ์—์„œ ๋ชป์จ!
		
		Child2 c1 = new Child2(); 
		c1.method1(); // ๋ถ€๋ชจ๊บผ๋ฅผ ๊ฐ€์ง€๊ณ  ์ž์‹์—์„œ ์“ธ ์ˆ˜ ์žˆ์–ด
		c1.method2(); // ๋ถ€๋ชจ๊บผ๋ฅผ ๊ฐ€์ง€๊ณ  ์ž์‹์—์„œ ์“ธ ์ˆ˜ ์žˆ์–ด
		c1.method3();
		
		Parent2 p2 = new Child2(); //์ž์‹๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ์‹œ์ผœ์„œ ๋ถ€๋ชจ์— ๋‹ด๊ฒ ๋‹ค // method1,2 / method๋ถ€๋ชจ1,2 method์ž์‹2,3
		p2.method1();
		p2.method2(); //์ตœ์‹  222(์ž์‹๋ฉ”์†Œ๋“œ) /์ž๋™์œผ๋กœ ์žฌ์ •์˜๋œ ์ž์‹method2๋กœ ์—ฐ๊ฒฐ!   
//		p2.method3(); // ๋ถ€๋ชจ์— ๋‹ด๊ฒจ์ ธ ์žˆ๋Š” ๊ฐ์ฒด!!! ๋ถ€๋ชจ๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ๊ฒƒ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ // method3์˜ ๊ธฐ๋Šฅ์€ ์žˆ๋Š”๋ฐ ๊ฒ‰์œผ๋กœ ๋ฒ„ํŠผ๊ตฌํ˜„์ด ์•ˆ๋˜์žˆ์–ด์„œ ๋ชป์“ฐ๋Š”๊ฑฐ์ง€..!
		
        Parent2 p3 = new Child3(); //method1,2 = ๋ถ€๋ชจmethod1,2 ์ž์‹method2
		p3.method1(); 
		p3.method2(); //๋‚˜๋„ ๋‚˜๋งŒ์˜ 222(์ž์‹๋ฉ”์†Œ๋“œ) /์ œ์ผ ์ตœ์‹ ๊บผ ์ž์‹ method2๋กœ ์—ฐ๊ฒฐ
		
	}
}

class Parent2 {
	void method1() {
		System.out.println("111");
	}
	
	void method2() {
		System.out.println("222");
	}
}

class Child2 extends Parent2 { //์ฒซ๋ฒˆ์งธ ์ž์‹
	void method2() { //๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
//		super.method2();
		System.out.println("์ตœ์‹  222");
	}
	
	void method3() {
		System.out.println("333");
	}
}

class Child3 extends Parent2 { //๋‘๋ฒˆ์งธ ์ž์‹
	void method2() {
		System.out.println("๋‚˜๋„ ๋‚˜๋งŒ์˜ 222");
	}
}

๐Ÿ–
Parent2 p2 = new Child2();
์ž์‹๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ์‹œ์ผœ์„œ ๋ถ€๋ชจ์— ๋‹ด๊ฒ ๋‹ค OOO
๋‚˜๋ˆ ์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด
๋ถ€๋ชจ method 1,2 = ์ž์‹ method 2,3
๊ทธ๋ž˜์„œ method3์€ ๊ธฐ๋Šฅ์€ ์žˆ์ง€๋งŒ ํ˜„์žฌ ๋ถ€๋ชจ์— ๋ชธ๋‹ด๊ถˆ์ ธ์žˆ๋Š”์• ๋ผ ๋ฒ„ํŠผ์€ ๊ตฌํ˜„์ด ์•ˆ๋˜์žˆ์–ด์„œ ์“ฐ์งˆ ๋ชปํ•˜๋Š”๊ฑฐ๊ณ 
method2๋Š” ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ ์ œ์ผ ์ตœ์‹ ๊บผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋œ๊ฑฐ๊ฐ€ ๋‚˜์˜จ๋‹ค!

//								Vehicle vh = bike, boat ๊ฐ€๋Šฅ!
	public static void runParameter(Vehicle vh) { //static์€ static๋งŒ ์“ธ ์ˆ˜..
		vh.run(); //๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ ๊ฐ์ฒด์˜ run ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ
 	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Vehicle v1 = new Vehicle();
		Vehicle v12 = new Vehicle();
		Vehicle v13 = new Vehicle();
		ArrayList<Vehicle> vehicleList = new ArrayList<Vehicle>();
		vehicleList.add(v1);
		vehicleList.add(v12);
		vehicleList.add(v13);
		
		
		Bike v2 = new Bike();
		Bike v22 = new Bike();
		Bike v23 = new Bike();
		
		Boat v3 = new Boat();
		Boat v32 = new Boat();
		
		//์ž์‹๊ฐ์ฒด๋ฅผ ๋ถ€๋ชจ vehicleList์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค
		vehicleList.add(v2); // == vehicleList.add( new Bike() );
		vehicleList.add(v22);
		vehicleList.add(v23);
		
		vehicleList.add(v3); // == vehicleList.add( new Boat() );
		vehicleList.add(v32);
		
		for (Vehicle vh : vehicleList) {
			vh.run();
		}
		
		System.out.println("------------------------");
		runParameter(v23); //๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ Vehicle์ด๋ผ bike๋„ ๋˜๊ณ ! new Bike()๋ผ์„œ Bike์˜ run()
		runParameter(v32); //๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ Vehicle์ด๋ผ boat๋„ ๋œ๋‹ค! new Boat()๋ผ์„œ Boat์˜ run()
		
	}

}

class Vehicle { //ํƒˆ ๊ฒƒ!
	
	void run() {
		System.out.println("ํƒˆ ๊ฒƒ์ด ๋‹ฌ๋ฆฐ๋‹ค.");
	}	
}

class Bike extends Vehicle{ //์ž์ „๊ฑฐ
	 
	void run() { //๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ (์ƒ์†์ผ๊ฒฝ์šฐ)
		System.out.println("ํŽ˜๋‹ฌ์„ ๊ตด๋ ค์„œ ๋‹ฌ๋ฆฐ๋‹ค.");
	}
}

class Boat extends Vehicle { //๋ณดํŠธ
	
	void run() { //๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ (์ƒ์†์ผ๊ฒฝ์šฐ)
		System.out.println("ํ”„๋กœํŽ ๋Ÿฌ๋ฅผ ๋Œ๋ ค์„œ ๋‹ฌ๋ฆฐ๋‹ค.");
	}
}

=>

//์ž์‹๊ฐ์ฒด๋ฅผ ๋ถ€๋ชจ vehicleList์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค
	vehicleList.add(v2); // == vehicleList.add( new Bike() );
	vehicleList.add(v22);
	vehicleList.add(v23);
		
	vehicleList.add(v3); // == vehicleList.add( new Boat() );
	vehicleList.add(v32);
		
	for (Vehicle vh : vehicleList) {
		vh.run();
	}

๐Ÿ–์—ฌ๊ธฐ์„œ
Vehicle v1 = new Bike(); //๋ฐ”์ดํฌ๋ฅผ ์ƒ์„ฑํ•ด์„œ vehicle์— ๋„ฃ์–ด์ค€๋‹ค
Vehicle v2 = new Boat(); //๋ณดํŠธ๋ฅผ ์ƒ์„ฑํ•ด์„œ vehicle์— ๋„ฃ์–ด์ค€๋‹ค
๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ˆ๊นŒ!
vehicleList์—๋„ Bike๊ฐ์ฒด์™€ Boat๊ฐ์ฒด๋ฅผ ๋‹ด์•„์ค„ ์ˆ˜ ์žˆ๋Š”๊ฑฐ์ง€

=>

public static void runParameter(Vehicle vh) { //static์€ static๋งŒ ์“ธ ์ˆ˜..
		vh.run(); //๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ ๊ฐ์ฒด์˜ run ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ
}

=>

runParameter(v23); //๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ Vehicle์ด๋ผ bike๋„ ๋˜๊ณ ! new Bike()๋ผ์„œ Bike์˜ run()
runParameter(v32); //๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ Vehicle์ด๋ผ boat๋„ ๋œ๋‹ค! new Boat()๋ผ์„œ Boat์˜ run()

๐Ÿ–
๋ฉ”์ธํด๋ž˜์Šค์— ๋ฉ”์†Œ๋“œ ๋งŒ๋“ค์–ด์ฃผ๊ณ 
์–ด์จŒ๋“  Vehicle์—๋Š” Bike, Boat ๋‹ค ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜์— Bike, Boat ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค~!

๐Ÿšจ๊ฒฐ๋ก ๐Ÿšจ
<mainํด๋ž˜์Šค>
A b = new B(); -> B ๊ฐ์ฒด ์ƒ์„ฑ์‹œํ‚ค๊ณ  A์— ๋„ฃ๋Š”๋‹ค // A paint(), draw() = A paint(), draw() , B paint(), draw()
b.paint();
b.draw();

<A ํด๋ž˜์Šค>
๋ฉ”์†Œ๋“œ
paint();
draw();

<B ํด๋ž˜์Šค>
๋ฉ”์†Œ๋“œ
paint();
draw();

๊ฐ€ ์žˆ๋‹ค๋ฉด!

1. b.paint(); => A์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋Š”๋ฐ B์—๋„ ๋˜‘๊ฐ™์€ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด(์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๋ฉ”์†Œ๋“œ) ๊ทธ๊ฑธ ์“ด๋‹ค! ๊ฐ€์žฅ ์ตœ์‹ ๊บผ๋ฅผ ์“ด๋‹ค~! Bํด๋ž˜์Šค์— ์žˆ๋Š” paint()๋ถ€ํ„ฐ ๊ฐ„๋‹ค~
์ƒ์†๊ด€๊ณ„์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ : ์•„๋น ๊บผ ์•ˆํ•ด! ๋‚ด๊บผํ• ๊ฑฐ์•ผ

2. b.draw(); => ์œ„์™€ ๋˜‘๊ฐ™์€ ๋…ผ๋ฆฌ! Bํด๋ž˜์Šค์— ์žˆ๋Š” draw()๋กœ ๊ฐ„๋‹ค~!

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

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

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