예제)
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 |