자바 상속관계가 문제인거 같습니다.

shs0917의 이미지

요즘 자바를 틈틈히 공부를 하고 있는데.. 코드가 컴파일이 안되네요...
제가 아직 객체지향 개념도 부족하고 해서.. 에러 메시지를 봐도 해결을 하기가
여의치 않군요.. 많은 가르침 부탁 드립니다.

import java.io.*;
interface Operations{
	int next();
	int get_value();
	void printQueue(int k);
}

class Numqueue implements Operations{
	protected int n;
	Numqueue(){
		n = 0;
	}
	public int get_value(){
		return n;
	}
	public void printQueue(int k){
		System.out.println(get_value() + ": the first value");
		for(int i = 1; i < k; i++){
			System.out.print(next() + ", ");
		}
		System.out.println();
	}
}

class Odd extends Numqueue{
	protected int intval;
	Odd(){
		n = 1;
		intval = 2;
	}
	Odd(int nr, int holsu){
		n = nr;
		intval = holsu;
	}

	public int next(){
		n = n + intval;
		return n;
	}
}

public class Test{
	public static void main(String args[]){
		Numqueue obj;
		obj = new Odd(5, 2);
		obj.printQueue(10);
	}
}

컴파일시 에러코드는 다음과 같습니다.

Test.java:8: Numqueue is not abstract and does not override abstract method next
() in Operations
class Numqueue implements Operations{
^
Test.java:19: cannot resolve symbol
symbol  : method next ()
location: class Numqueue
                        System.out.print(next() + ", ");
                                         ^
2 errors
다크슈테펜의 이미지

결과값이
5: the first value
7, 9, 11, 13, 15, 17, 19, 21, 23,
이거 아닌가요...그냥 테스트 삼아 실행해봤는데요....
에러 메시지 없이 실행되었습니다.

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

다크슈테펜의 이미지

저는 초보지만 제가 생각하기에는...
public class Test{
public static void main(String args[]){
Numqueue obj;
obj = new Odd(5, 2);
obj.printQueue(10);
}
}

이부분을

public class Test{
public static void main(String args[]){

Operations obj= new Odd(5, 2);
obj.printQueue(10);
}
}

바꾸어서 실행해보면 어떨까합니다.

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

shs0917의 이미지

그게.. 저도 아무리 생각해봐도 저의 짧은 지식으로는 에러가 있을리 없다고
생각하고 했지만... 실제 컴파일이 되지 않기 때문에.. 에러 메시지도 같이
올려드렸구요..^^;; 혹시 컴파일러 세팅이 잘못되어서 그럴수도 있을까요?
환경변수나 그런거요.. 이긍.. 윈도우에서는 자바 컴파일러 쓰기 불편하네요..
그냥.. 텍스트 기반 툴킷을 쓰다 보니..ㅠ.ㅠ 리눅스로 부팅해봐야 겠어요..
아.. 그리고 결과는 맞아요.. 함수 이름처럼 그냥.. 홀수 구하는거죠..

컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러

다크슈테펜의 이미지

리눅스 이클립스 3.0.1 그리고 JDK 1.5 버전에서 컴파일했습니다.
별다른 설정은 안한것 같은데 에러없이 실행되더군요....

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

kall의 이미지

shs0917 wrote:
컴파일시 에러코드는 다음과 같습니다.
Test.java:8: Numqueue is not abstract and does not override abstract method next
() in Operations
class Numqueue implements Operations{
^
Test.java:19: cannot resolve symbol
symbol  : method next ()
location: class Numqueue
                        System.out.print(next() + ", ");
                                         ^
2 errors

next() 함수가 abstract도 아니고, 오버라이드 해서 구현되지도 않았다는 에러니까

Numqueue를 abstract class로 선언하든지,
next를 오버라이드해서 아무내용이나 써넣으면 되겠지요.

----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ

atie의 이미지

Numqueue is not abstract and does not override abstract method next() in Operations.

이 에러 메세지대로 입니다. Operation 인터페이스에 사용할 메쏘드를 정의했으니, Numqueue 클래스에 메쏘드를 만들어 넣어야겠죠. (인터페이스에 있는 메쏘드는 추상 메쏘드여서 이를 implements한 클래스에서는 그 메쏘드를 정의해주어야 합니다.)

이런식으로요.

public int next() {
	return 0;
}

그럼, System.out.print(next() + ", ") 에서 어느 next()가 불려질 거냐가 궁금할 텐데... Odd 클래스의 next()가 불려집니다. (obj 오브젝트가 생성되었으므로 서브 클래스인 Odd 클래스의 next() 메쏘드가 override 하는 겁니다.)

----
I paint objects as I think them, not as I see them.
atie's minipage

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.