YS's develop story
JAVA error) The method must override or implement a supertype method 본문
안녕하세요 오늘은 java문제를 풀다가 한 실수를 정리하려고 합니다 ~
바로 코드를 확인해 볼까요?
package javapractice;
public class JavaPractice {
public static void main(String[] args) {
Shape[] arr= {
new Circle("Circle",5),
new Rectangle("Rectangle",3,4),
new Triangle("Triangle",5,5)
};
double sum=0;
for(Shape a: arr) {
System.out.println(a.getName()+"면적 : "+a.getArea());
sum+=a.getArea();
}
System.out.println("면적의 합 : "+ sum);
}
}
class Shape{
protected String name;
Shape(String name){
this.name=name;
}
String getName() {
return name;
}
}
class Circle extends Shape{
private double radius;
private final double PI=3.141592;
Circle(String name,double radius){
super(name);
this.radius=radius;
}
@Override
double getArea() {
return radius*radius*PI;
}
}
class Rectangle extends Shape{
private double length;
private double height;
Rectangle(String name,double length,double height){
super(name);
this.length=length;
this.height=height;
}
@Override
double getArea() {
return length*height;
}
}
class Triangle extends Shape{
private double length;
private double height;
Triangle (String name,double length,double height){
super(name);
this.length=length;
this.height=height;
}
@Override
double getArea() {
return length*height*0.5;
}
}
이 코드는 아래의 사진과 같이 에러가 발생합니다.
에러의 원인은 상위 클래스인 Shape에 오버라이딩 하는 메소드 getArea의 선언 및 정의가 없기 때문입니다.
Shape의 메소드 getArea를 사용하지 않더라도
하위클래스가 상속을 하여 사용하게 되면 상위 클래스에 무조건 선언이 있어야 합니다.
Shape 클래스에 getArea메소드를 다음과 같이 추가 해 줍시다.
이 때, 오버라이딩 되어야 하기 때문에 다른 클래스에 있는 getArea메소드와 반환형, 매개변수가 같아야 합니다.
어차피 Shape의 getArea메소드는 사용하지 않으니 return 0으로 해주었습니다.
class Shape{
protected String name;
Shape(String name){
this.name=name;
}
double getArea() {
return 0;
}
String getName() {
return name;
}
}
이처럼 코드를 수정하게 되면 아래와 같이문제없이 코드가 작동 됩니다.
'Java' 카테고리의 다른 글
자주 사용하는 정규 표현식(Regex) 정리 (0) | 2023.08.01 |
---|---|
JSP, Tomcat활용하여 MySQL 데이터 가져오기 (0) | 2022.11.09 |
Java ) java 상속관련 .. (0) | 2020.10.16 |
JAVA error) Implicit super constructor is undefined, Constructor call must be the first statement in a constructor. (0) | 2020.10.14 |
JAVA ) java 2차원 배열 관련.. , 열혈 java 프로그래밍 309쪽 문제 2번 (0) | 2020.10.10 |
Comments