티스토리 뷰
오버라이딩이란? 상위 클래스에 정의된 메소드의 이름, 반환형, 매개변수 선언까지
완전히 동일한 메소드를 하위 클래스에서 재 정의 하는 것
* 하위 클래스에서 오버라이딩 된 상위 클래스의 메소드를 호출하려면 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 |
댓글