본문 바로가기

자바/객체지향

재정의(override), 중복정의(overloading)

예제)


public class Test8 {

public static void main(String[] args) {

Rect aa=new Rect();

Circle bb=new Circle();

aa.calc(10, 20);

aa.write("사각형 넓이 :");

bb.result(10);

bb.write("원 넓이 :");

}

}


class Ex8 {

protected double area;

public void write(String title) {

System.out.println(title+area);

}

}


class Rect extends Ex8 {

private int w, h;

public void calc(int w, int h) {

this.w=w;

this.h=h;

area=(double)this.w*this.h;

}

}


class Circle extends Ex8 {

private int r;

public void result(int r) {

this.r=r;

area=(double)this.r*this.r*3.14;

}

/*

* 재정의(Override)

*    상위 클래스의 메소드를 재정의

*    리턴타입, 메소드명, 인수 개수, 인수형이 일치해야함

*    접근제어자는 크거나 같아야한다.

* @Override : annotation

*    프로그램의 메타정보. 컴파일러나 외부 틀에서 프로그램에 대한 부가적인 설명 제공(5.0 부터)

*    주석은 컴파일시 제거 되지만 어노테이션은 컴파일되어도 제거되지 않는다.

*    오버라이드라는 것을 명시하면서 만약 메서드가 오버라이드 조건에 충족하지 못하면 에러 발생.

*    aanotation을 쓰지 않는다면, 오버라이드 조건 충족시 오버라이드가 되지만 충족 못할 시 에러 발생하지 않고 그대로 컴파일됨.

*    확실하게 오버라이드라는 것을 확인하기 위해서 사용함.

*/

@Override

public void write(String title) {

System.out.println("반지름 : "+ r+"," + title+area);

}

//중복정의 : 메소드의 이름은 같지만 괄호안의 인수의 개수가  다르거나 형이 다른 메소드, 리턴타입(void, int 등)은 다르나 같으나 상관없음.

public void write(String title, int a) {} // overloading(중복정의). 상위에 write() 가 있으므로

// public int write(String title) {         // 중복정의 위반. 리턴타입만 다름.

}

결과)


사각형 넓이 :200.0

반지름 : 10,원 넓이 :314.0


'자바 > 객체지향' 카테고리의 다른 글

static 키워드  (0) 2013.05.21
업캐스팅 다운캐스팅  (0) 2013.05.19
자바의 상속  (0) 2013.05.19
Method 메서드  (0) 2013.05.14
객체지향을 위한 첫걸음 class 클래스  (0) 2013.05.13