수다님들~~ 인터페이스관련 문젠데 도와주세욤 ㅠㅠ
가장
public class main{
public static void main(String args[]){
inter obj = new Rectangle(15.0, 10.0);
obj.aaa();
System.out.println(obj.area());
obj = new Circle(15.0);
obj.aaa();
System.out.println(obj.area());
}
}
위에있는 것은 메인 클래스입니다. inter은 인터페이스이고 obj는 객체겠종
Rectangles는 클래스로써 사각형의 넓이는 계산하는 클래스이고
Circle 클래스는 원의 넓이는 계산하는 클래스입니다.
그런데~ 문제는 요구사항에 도형클래스를 따로 생성하고 이 도형클래스의 생성자에 도형의
넓이를 구하는 정보를 인자로 받아서 맴버변수에 저장하라
이부분이 해결이 안되네욤; 생성자로 인자를 받자니 Rectangles는 두개의 더블형이고
Circle은 한개의 더블형이고 이걸 객체개념으로 받아야 하나요;;;?
aaa는 도형클래스 안에있는 입력된 수를 문자열로 출력하는 기능을 가진 메소드구욤
area는 역시 도형 클래스 안에있는 메소드로써 값을 계산해주는 역할을 하고있습니다.
인터페이스로 이두개의 메소드를 도형 클래스에 구현해주고 Rectangles와 Circle클래스도 만들어 놓기까진
했는데 도형클래스의 생성자에서 넓이를 구하기위한 저 15.0이나 10.0등을 어떻게 적용시켜야될지를 모르겟네욤;;
간략한 소스면 너무 감사하겠고 개념만이라도 짚어주세요~
혹 문제 자체가 이해안되시면 그부분에 대한 점도 올려주세요 ㅠㅠ 이틀째 고민하다고 글올립니다.
-
든솔
아 그리고 super()는 꼭 생성자에 첫줄에 써야만 됩니다.
참 그리고 의문점이 있는데요..
Rectangle하고 Circle 클래스는 하는짓이 뭔가요? 괜히 만들고 하는짓도 없는거 아닌가요?
전체적인 설계가 없는 문제인가 아니면 전달을 잘못하시는듯 이렇게 돼면 인터페이스 문제도 아닌거 아닌가요?
그리고 계속 재정의 할거면 뭐하러 도형 클래스에 값을 저장하나요?
원하고 사각형하고 계산 방식도 틀린데.....여러가지로 의문점만 있네요... -
앵겨쪼
어째튼 설명과 왜 그렇게 해야 하는지 이해가 안가지만요.
public class shape implements inter {} 하시고 inter의 메소드 재정의하시고
public class Rectangle extends shape {}
public class Circle extends shape {} 해서 하라는 건데요.
shape의 맴버변수에 저장하는건 쉬워요 super()라는 걸 쓰면 상위클래스에 생성자를 호출하거든요
예를 들면 super(15. -
아담
클래스도 인터페이스의 메소드를 구현하고 Rectangle와 Cirlcle 클래스에서도 동일 메소드를 구현해야
되지 않나욤? 이 부분만 해결하면 될듯한데 미치겟네요... 이런기분 ㅠㅠ
될듯될듯 안되는 이런 기분 ㅠㅠ 도와주세욤..
댓글다신 분들 너무 감사요 ^^ -
영미
먼저 답변해주신분들 너무 감사합니다. ^^ 아직 해결은 못했지만 ㅠㅠ 문제에 대한 정의가 필요하겟네욤
수다님 말대로 인자를 각각의 클래스 생성자 에서 받으면 되겠지만
이번 문제의 요구사항에 도형클래스 라는 새로운 클래스를
만들고 그 도형클래스의 생성자에 넓이를 구하기 위한 인자를 각각 받아서 맴버 변수에 저장해야한다. 라고
하는 부분이 막히네욤 도형 클래스의 생성자에 즉 새로 만든 도형 클래스에
rectangle(15.0, 10.9)의 인자가 들어가 -
달빛
문제 해결의 포인트 :
inter obj = new Rectangle(15.0, 10.0); -- 이렇게 할수 있다는것은
Rectangle이 inter로 자동형변환 된다는 것이지요.
그렇다면 Rectangle은 inter를 상속받아야 한다는 것이지요
그런데 inter가 인터페이스 이므로 메소드를 모두 재정의 한다. 끝이네요. -
바름
클래스를 각자 만드니 생성자도 따로따로 만들쟎어요..
아무 상관없을듯 합니다.
두개의 클래스를 만드시고
public class Rectangle implements inter {}
public class Circle implements inter {}
클래스 안에 inter안에 있는 메소드 모두 재정의 하세요
물론 생성자는 당연이 만드시는것 아시겟죠?
그럼 끝이죠
쉬운문제를 너무 어렵게 생각하셔서 그런듯합니다.
인터페이스도 클래스라고 생각 -
어른처럼
제가 볼때는 인터페이스(inter)를 상속받는 2개의 클래스(Rectangle, Circle) 문제인듯한데요.
인터페이스 이니 클래스에서 메소드를 모두 재정의 해줘야 겠죠...
두개 클래스 모두 인터페이스로 부터 상속받았으니 모두 inter 타입으로 만들수있고요.
이렇게 해서 인터페이스(추상메소드)를 이용한 재정의 문제이군요.
두개의 클래스만 만드시면 그냥 될듯합니다. -
보람
솔직히 님이 쓴 글이 100% 이해는 안가요... 무슨 질문인지요. 대강 제가 이해 한대로 써봤습니다.
-
호습다
문제점을 파악하고
1. 일단 Rectangles 클래스와 Circle 클래스는 인자를 더블로 못받는다.
해결책 : Rectangles 을 상속한 MyRectangles 을 만들고 생성자를 오버로딩 한다. Circle 도 마찬가지
현제 클래스는 public class MyRectangles extends Rectangles{
//여기엔 오버로딩 생성자 필요
}
2. 인터페이스를 만들고 2개의 매서드를 구현해야 한다.
해결책 : 일단 인터페이스와 -
연체리
생성자 오버로딩 문제이군요. 도형클래스의 생성자를 두 개 만들어 놓으면 됩니다.