12
20

๋‹ค์Œ์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ํด๋ž˜์Šค๋“ค์„ ์ž‘์„ฑํ•˜์„ธ์š”. ํŠนํžˆ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๊ทœ์น™๊ณผ, super() ๋ฐ super๋ฅผ ์ ์šฉํ•ด์„œ ์ค‘๋ณต์ด ์ตœ์†Œํ™”๋˜๋„๋ก ์ž‘์„ฑํ•˜์„ธ์š”.

 

Shape  Line - Square  Rect
             Circle
1) Shape
- ๋ฉค๋ฒ„๋ณ€์ˆ˜: String name
- ์ƒ์„ฑ์ž: name์„ ์ดˆ๊ธฐํ™”
- ๋ฉ”์†Œ๋“œ: void printInfo() //name์„ ์ถœ๋ ฅ
2) Line
- ๋ฉค๋ฒ„๋ณ€์ˆ˜: int length
- ์ƒ์„ฑ์ž: name๊ณผ length๋ฅผ ์ดˆ๊ธฐํ™”
- ๋ฉ”์†Œ๋“œ: void printInfo() //name๊ณผ length๋ฅผ ์ถœ๋ ฅ
3) Square
- ๋ฉค๋ฒ„๋ณ€์ˆ˜: int area;
- ์ƒ์„ฑ์ž: name๊ณผ length๋ฅผ ์ดˆ๊ธฐํ™”
- ๋ฉ”์†Œ๋“œ: void getArea(int, int) //์‚ฌ๊ฐํ˜•์˜ ๋„“์ด๋ฅผ ๊ตฌํ•จ=> area = length * length
               void printInfo() //name, length, area๋ฅผ ์ถœ๋ ฅ
3) Rect
- ๋ฉค๋ฒ„๋ณ€์ˆ˜: double length2
- ์ƒ์„ฑ์ž: name๊ณผ length, length2๋ฅผ ์ดˆ๊ธฐํ™”
- ๋ฉ”์†Œ๋“œ: void printInfo() //name, length, length2, area๋ฅผ ์ถœ๋ ฅ
4) Circle
- ๋ฉค๋ฒ„๋ณ€์ˆ˜: double r, area;
- ์ƒ์„ฑ์ž: name๊ณผ r์„ ์ดˆ๊ธฐํ™”
- ๋ฉ”์†Œ๋“œ: void getArea() //์›์˜ ๋„“์ด๋ฅผ ๊ตฌํ•จ=> area = 3.14 * r * r

 

OverridingEx ํด๋ž˜์Šค
1) main()
- Line, Square, Rect, Circle ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ ,
์ด ๊ฐ์ฒด๋“ค์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ printํ˜ธ์ถœ
2) void print(Shape s)
- ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ํ™•์ธํ•˜๊ณ , ์•„๋ž˜์˜ ์กฐ๊ฑด๋Œ€๋กœ ์ฒ˜๋ฆฌ(๋‹ค์šด ์บ์ŠคํŒ… ํ•„์š”)
* Line: name, length ์ถœ๋ ฅ
* Square: name๊ณผ length, area ์ถœ๋ ฅ
* Rect: name๊ณผ length, length2, area ์ถœ๋ ฅ
* Circle: name๊ณผ r, area ์ถœ๋ ฅ

class Shape{
	String name;		//๋ฉค๋ฒ„๋ณ€์ˆ˜
	Shape(String name){
		this.name = name;	//name์„ ์ดˆ๊ธฐํ™”
	}
	
	void printInfo() {		//name์„ ์ถœ๋ ฅ
		System.out.println(name);
	}
}
class Line extends Shape{
	int length;		//๋ฉค๋ฒ„๋ณ€์ˆ˜
	Line(String name, int length){	//name, length ์ดˆ๊ธฐํ™”
		super(name);
		this.length = length;
	}

	@Override
	void printInfo() {		//name, length ์ถœ๋ ฅ
		super.printInfo();
		System.out.println("length: "+length);
	}
}
class Square extends Line{
	int area;		//๋ฉค๋ฒ„๋ณ€์ˆ˜
	
	Square(String name, int length){
		super(name, length);
		getArea(length, length);		//๋„“์ด ๊ณ„์‚ฐ
	}

	void getArea(int w, int h) {		//์‚ฌ๊ฐํ˜• ๋„“์ด ๊ตฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ
		length = w;
		area = length * length;
	}
	
	@Override
	void printInfo() {		//name, length, area ์ถœ๋ ฅ
		super.printInfo();
		System.out.println("area: "+area);
	}
	
}
class Rect extends Square{
	int length2;		//๋ฉค๋ฒ„๋ณ€์ˆ˜
	
	Rect(String name, int length, int length2){		//name, length, length2 ์ดˆ๊ธฐํ™”
		super(name, length);
		this.length2 = length2;
		getArea(length, length2);		//๋„“์ด ๊ตฌํ•˜๊ธฐ ํ˜ธ์ถœ
	}
	
	@Override
	void getArea(int w, int h) {	//์‚ฌ๊ฐํ˜• ๋„“์ด ๊ตฌํ•˜๊ธฐ. ๋‚ด์šฉ(super)์„ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์จ๋„ ๋จ.
		length = w;
		length = h;
		area = length * length2;
	}

	@Override
	void printInfo() {		//name, length, length2, area ์ถœ๋ ฅ
		super.printInfo();
		System.out.println("length2: "+length2);
	}
}

class Circle extends Shape{
	double r, area;		//๋ฉค๋ฒ„๋ณ€์ˆ˜
	
	Circle(String name, double r){	//name, r ์ดˆ๊ธฐํ™”
		super(name);
		this.r = r;
	}

	void getArea() {	//๋„“์ด ๊ตฌํ•˜๊ธฐ. ๋ถ€๋ชจ์— ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š์•„ ์ƒˆ๋กœ ๋งŒ๋“ฆ
		area = 3.14 * r * r;
	}

	@Override
	void printInfo() {		//์ถœ๋ ฅ
		super.printInfo();
		getArea();		//๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ณณ์—์„œ ๋„“์ด ๊ตฌํ•˜๊ธฐ ํ˜ธ์ถœํ•ด๋„ ๊ดœ์ฐฎ์Œ
		System.out.println("r: "+r+" area: "+area);
	}
}

public class OverridingEx {
	static void print(Shape obj) {	//์—…์บ์ŠคํŒ…
		if(obj instanceof Shape) {
			obj.printInfo();
		}else if(obj instanceof Line) {
			Line l = (Line)obj;		//๋‹ค์šด์บ์ŠคํŒ…
			l.printInfo();
		}else if(obj instanceof Square) {
			Square sq = (Square)obj;		//๋‹ค์šด์บ์ŠคํŒ…
			sq.printInfo();
		}else if(obj instanceof Rect) {
			Rect r = (Rect)obj;		//๋‹ค์šด์บ์ŠคํŒ…
			r.printInfo();
		}else if(obj instanceof Circle) {
			Circle c = (Circle)obj;		//๋‹ค์šด์บ์ŠคํŒ…
			c.printInfo();
		}else {
			System.out.println("๊ทธ๋Ÿฐ ๋„ํ˜•์€ ์—†์Šต๋‹ˆ๋‹ค.");
		}
		System.out.println("---------------");
	}
	
	public static void main(String[] args) {
		Shape s = new Shape("Shape");
		Line l = new Line("Line", 10);
		Square sq = new Square("Square", 20);
		Rect r = new Rect("Rect", 10, 20);
		Circle c = new Circle("Circle",2.0);
		
		print(s); print(l); print(sq); print(r); print(c);
		
		sq.getArea(2, 3);
		sq.printInfo();
		r.getArea(3, 4);
		r.printInfo();
	}
}
728x90
๋ฐ˜์‘ํ˜•
COMMENT