728x90
반응형
package chap7;
/*
* 추상클래스
* 1. 추상메서드를 메법로 가질 수 있는 클래스
* 2. abstract 예약어로 구현함
* 3. 객체화 불가.
* => 상속을 통해서 자손클래스의 객체화를 통해 객체화 가능.
* 4. 그외는 일반클래스와 동일함 (생성자, 멤버변수, 멤버메서드, 상속, .....)
*
* 추상메서드 : 메서드의 선언부만 존재하는 메서드. 구현부가 없다
* => 자손클래스에서 반드시 오버라이딩 해야함.
*
* shape : 도형클래스
* 멤버변수 : 도형의 종류 (type)
* 멤버메서드 : 넓이 area()
* 둘레 length()
*/
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;
}
double area() {
return r * r * Math.PI;
}
double length() {
return 2 * r * Math.PI;
}
public String toString() {
return type + "반지름:" + r + ", 넓이:" + area() + ", 둘레:" + length();
}
}
//Rectangle클래스 구현하기
class Rectangle extends Shape {
int w,h;
Rectangle(int w, int h) {
super("사각형");
this.w = w;
this.h = h;
}
@Override
double area() {
return w*h;
}
@Override
double length() {
return 2*(w+h);
}
public String toString() {
return type + "가로" + w + ", 세로:" + h + ", 넓이:" + area() + ", 둘레:" + length();
}
}
public class ShapeEx1 {
public static void main(String[] args) {
Shape[] arr = new Shape[2];
arr[0] = new Circle(10);
arr[1] = new Rectangle(10,10);
double areasum=0;
double lensum=0;
for(Shape s : arr) {
System.out.println(s);
areasum += s.area();
lensum += s.length();
}
System.out.println("전체 도형 면적 합:" + areasum);
System.out.println("전체 도형 둘레 합:" + lensum);
}
}
728x90
반응형
'study > Java' 카테고리의 다른 글
[Java] 23. 제한자 (접근제한자, 그외제한자) (0) | 2022.03.21 |
---|---|
[Java] 23. 패키지 (0) | 2022.03.21 |
[Java] 22. 상속 Exam2 (각 클래스를 생성하고 출력하기) (0) | 2022.03.21 |
[Java] 22. instanceof 연산자 (0) | 2022.03.21 |
[Java] 22. 상속2 (0) | 2022.03.21 |