티스토리 뷰
오버라이딩이란? 상위 클래스에 정의된 메소드의 이름, 반환형, 매개변수 선언까지
완전히 동일한 메소드를 하위 클래스에서 재 정의 하는 것
* 하위 클래스에서 오버라이딩 된 상위 클래스의 메소드를 호출하려면 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
'프로그래밍 > Java' 카테고리의 다른 글
| 자바 ! Object 클래스 ( toString(), equals() 메소드 등..) (0) | 2017.05.01 |
|---|---|
| 자바 ! 인터페이스 (interface) (0) | 2017.04.30 |
| 자바 ! 생성자 오버로딩과 this 키워드 (0) | 2017.04.25 |
| 자바 ! 상속 (extends , super) (0) | 2017.04.24 |
| 자바 ! 메소드 오버로딩 (1) | 2017.04.23 |
댓글
