JAVA
221013 abstract 실습 원과 사각형 넓이 구하기
주영재
2022. 10. 13. 17:14
부모
package quiz13;
public abstract class Shape {
private String name;
public Shape(String name) {
this.name = name;
}
//오버라이딩을 강제화 한다면 추상메서드로 선언
public abstract double getArea();
//오버라이딩을 강제화 하지않는다면 일반메서드로 선언
public String getName() {
return "도형이름:" + name;
}
}
자식
package quiz13;
public class Rect extends Shape{
//사각형은 생성될 때 이름과, 변의 길이를 받도록 처리하고,
//getArea()는 사각형의 넓이를 계산하도록 오버라이딩 처리
//main에서 확인
private int side;
public Rect(String name,int side) {
super(name);
this.side=side;
}
@Override
public double getArea() {
double answer = side*side;
return answer;
}
}
package quiz13;
public class Circle extends Shape {
//원은 생성될 때 이름과, 반지름의 길이를 받도록 처리하고,
//getArea()는 원의 넓이를 계산하도록 오버라이딩 처리
//main에서 확인
private int radius;
public Circle(String name, int radius) {
super(name);
this.radius=radius;
}
@Override
public double getArea() {
double answer = radius*radius*Math.PI;
return answer;
}
}
main
package quiz13;
public class MainClass {
public static void main(String[] args) {
Shape rec = new Rect("사각형",4);
System.out.println(rec.getName());//상속
System.out.println(rec.getArea());//오버라이딩
Shape cir = new Circle("원",5);
System.out.println(cir.getName());
System.out.println(cir.getArea());
}
}
도형이름:사각형
16.0
도형이름:원
78.53981633974483
이때 자식생성자 안에 부모생성자를 super()로 호출하는 게 가능
public Rect(String name,int side) {
super(name);
this.side=side;
}
를 보면 부모생성자는 매개변수를 하나만 받지만 자식생성자는 매개변수를 두개 받는데, 매개변수가 하나인 부모생성자를 자식생성자 안에 생성하고 자식생성자는 매개변수를 두개 받는 것이 가능
getName은 상속받은 메서드. 자식생성자 안에 부모생성자가 있고 자식생성자가 매개변수를 받으며 그 매개변수가 다시 부모생성자의 매개변수가 되고 부모메서드에서 멤버변수로 사용이 된 것.