티스토리 뷰

오버라이딩이란? 상위 클래스에 정의된 메소드의 이름, 반환형, 매개변수 선언까지 

완전히 동일한 메소드를 하위 클래스에서 재 정의 하는 것



* 하위 클래스에서 오버라이딩 된 상위 클래스의 메소드를 호출하려면 super() 키워드를 사용해야합니다.



추상클래스란? 완전하지 않은 클래스를 의미한다.

따라서 인스턴스의 생성이 불가능한 클래스이다.





추상클래스와 오버라이딩에 대한 이론을 마치며 실습을 통해 공부하겠습니다.

추상클래스 Shape

// 도형 클래스.
// 모든 도형 클래스들의 기초 클래스

// 추상 클래스
// 추상클래스란 개념만 가지고 있는 대상을 설계한 클래스다.
// 따라서 명확한 기능의 정의를 내리기 힘든 경우 사용한다.

// ex) 도형의 정보를 표시해라 .. (어떤 도형인지 알고??)
// ex2) 도형의 넓이를 구해라.. (어떤 도형인지알고??)

// 하지만 추상클래스엔 명확한 기능을 정의 할 수도 있다.
// ex) 새는 날 수 있다.

public abstract class Shape {

	// 모든 도형들의 공통적인 데이터
	protected double area; // 넓이

	// 모든 도형들의 공통적인 메소드 (넓이 구하기)
	protected void makeArea() {
		System.out.println("넓이 구하기");
	}

	// 도형의 정보 보기

	// 기능의 정의를 명확하게 내릴 수 없는 메소드
	// 추상화의 대상이 되는 메소드
	public abstract void showShapeInfo();

}



추상클래스 shape를 상속받은 Circle 클래스

public class Circle extends Shape {

	// 필요한 데이터
	private int r;

	// super필요 X
	public Circle(int r) {
		// super(); 있어도 되고 없어도 되는 코드
		this.r = r;
	}

	// 오버라이딩의 조건
	// 1) 반환형, 메소드명, 매개변수가 부모의 메소드와 완벽히 일치 해야 한다.
	// 2) 접근 지시 제어자는 부모의 것보다 넓거나 같아야 한다.

	// ctrl + Space
	@Override
	protected void makeArea() {
		// TODO Auto-generated method stub
		super.makeArea();
		super.area = Math.pow(this.r, 2.0) * Math.PI;
	}

	/*
	 * @Override protected void makeArea() { super.makeArea(); // 부모의 메소드 호출 //
	 * super.area = this.r * this.r * 3.14; super.area = Math.pow(this.r, 2) *
	 * Math.PI; }
	 */

	@Override
	public void showShapeInfo() {
		// 넓이 구하기
		makeArea();
		System.out.println("반지름 : " + this.r);
		System.out.println("넓이    : " + super.area);

	}

	// Object 클래스에 정의된 toString() 오버라이딩
	// => Object 클래스에서 객체를 표현하는 방식 (패키지명, 클래스@메모리 주소값)이 아닌
	// 해당 클래스의 정보를 마음대로 기입할 수 있게 해준다.
	// 보통은 멤버변수의 값을 확인하는 용도로 사용한다.

	@Override
	public String toString() {
		// return super.toString(); // 부모의 toString을 실행 후 리턴
		// 클래스@메모리 주소값
		return "[반지름 : " + this.r + "]" + "[ 넓이 : " + super.area + "]";
	}
	
	public void rolling(){
		System.out.println("원이 굴러간다.");
	}

}



추상클래스를 상속받은 Circle클래스를 사용하는 메인클래스

public class ExampleAbstract{
	public static void main(String[] args) {

		Circle circle=new Circle(10);
		/*circle.showShapeInfo();
		
		
		System.out.println();
		Square square=new Square(10,20);
		square.showShapeInfo();*/
		
		System.out.println(circle);
		
		
	}
}


반응형
LIST
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함