- 추상클래스 Shape
추상클래스
1. 추상메서드를 가질 수 있는 클래스. abstract예약어 사용함.
2. 객체화 불가 => 객체화는 상속을 통해서 자손클래스의 객체로 객체화 가능
3. 객체화되는 자손클래스는 반드시 추상메서드를 오버라이딩 해야함
4. 그 외는 일반 클래스와 동일
(생성자,멤버변수,멤버메서드, 다른 클래스를 상속 받을 수 있음,...)
5. 업무를 표준화 시킬 수 있음.
추상메서드 : 선언부만 존재함. 구현부가 없다.
자손클래스에서 반드시 오버라이딩을 하도록 강제함.(오버라이딩 필수)
📌
package chap7;
abstract class Shape { //추상클래스 : 미완성 클래스? 객체화가 안됨
String type;
Shape(String type){
this.type = type;
}
abstract double area(); //추상메서드
abstract double length(); //추상메서드
}
class Circle extends Shape{
int r;
Circle(int r){
super("원");
this.r = r;
}
@Override
double area() {
return Math.PI*r*r;
}
@Override
double length() {
return Math.PI*r*2;
}
public String toString() {
return "반지름="+r+", 넓이="+area()+", 둘레="+length();
}
}
class Rectangle extends Shape{
int width,height;
Rectangle(int width,int height){
super("사각형");
this.width = width;
this.height = height;
}
@Override
double area() {
return width*height;
}
@Override
double length() {
return (width+height)*2;
}
public String toString() {
return "가로="+width+", 세로="+height+", 면적="+area()+", 둘레="+length();
}
}
public class ShapeEx1 {
public static void main(String[] args) {
//오류. Shape s = new Shape("도형"); //추상 클래스는 객체화가 불가하다.
Shape[] arr = new Shape[2];
arr[0] = new Circle(10);
arr[1] = new Rectangle(5,5);
for(Shape s: arr) {
System.out.println(s);
}
//도형의 면적의 합과 둘레의 합을 출력하기
//arr[0] :Shape타입의 참조변수
//arr[0].area() : Circle 객체의 area()메서드 호출
//arr[1].area() : Recyangle 객체의 area()메서드 호출
System.out.println("도형의 면적의 합: "+(arr[0].area()+arr[1].area()));
System.out.println("도형 둘레의 합: "+(arr[0].length()+arr[1].length()));
}
}
'수업(국비지원) > Java' 카테고리의 다른 글
[Java] chap7 : 클래스의 관계 - 상속2 (0) | 2023.04.15 |
---|---|
[Java] chap7 : 클래스의 관계 - 다형성(polymorphism)예제 (0) | 2023.04.15 |
[Java] chap7 : 클래스의 관계 - 제한자(Modifier), 접근제한자 (0) | 2023.04.15 |
[Java] chap7 : 클래스의 관계 - Instanceof연산자 (0) | 2023.04.15 |
[Java] chap7 : 클래스의 관계 - Pakage 패키지 예제 (0) | 2023.04.15 |