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은 상속받은 메서드. 자식생성자 안에 부모생성자가 있고 자식생성자가 매개변수를 받으며 그 매개변수가 다시 부모생성자의 매개변수가 되고 부모메서드에서 멤버변수로 사용이 된 것.