#java
#java
Вопрос:
Я не понимаю, почему этот код не компилируется
Похоже, что он не распознает «Nombre» как «Выражение». Проблема в том, что «Nombre» реализует «Выражение» (которое является интерфейсом). Есть ли у вас какие-либо идеи, откуда может возникнуть проблема?
Вот где это вызывает ошибку компиляции:
private static void testMoyenneToString(){
Moyenne s = new Moyenne(new Nombre(10), new Nombre(10));
assert(s.toString().equals("(10*10)"));
s = new Moyenne(new Nombre(10), new Nombre(-10));
assert(s.toString().equals("(10*(-10))"));
}
Это Moyenne .java :
package calc;
public class Moyenne extends Naire {
public Moyenne(Expression... operandes) {
super(operandes);
}
public int valeur() {
int somme = 0;
for (Expression e : super.operandes) {
somme = e.valeur();
}
return somme/super.operandes.length;
}
public String getOperateur() {
return "Moyenne" ;
}
}
это Nombre.java :
package calc;
public class Nombre implements Expression {
protected int val;
public Nombre(int val) {
this.val = val;
}
public int valeur(){
return this.val;
}
public String toString(){
return Integer.toString(this.val);
}
}
Это выражение.java (интерфейс) :
package calc;
interface Expression {
int valeur();
String toString();
}
Это ошибка, которую я получаю при компиляции :
javac -encoding "iso-8859-1" calc/tests/TestExpression.java
calc/tests/TestExpression.java:164: error: constructor Moyenne in class Moyenne cannot be applied to given types;
Moyenne s = new Moyenne(new Nombre(10), new Nombre(10));
^
required: Expression[]
found: Nombre,Nombre
reason: formal varargs element type Expression is not accessible from class TestExpression
calc/tests/TestExpression.java:167: error: constructor Moyenne in class Moyenne cannot be applied to given types;
s = new Moyenne(new Nombre(10), new Nombre(-10));
^
required: Expression[]
found: Nombre,Nombre
reason: formal varargs element type Expression is not accessible from class TestExpression
2 errors
Это моя диаграмма UML, которая поможет вам понять общую организацию здесь :
Комментарии:
1. Интерфейс
Expression
неpublic
является?2. это общедоступно, да
3. Не в соответствии с исходным кодом, который вы добавили к своему вопросу.
4. Хорошо, это было закрыто, я виноват. Я не знал, что он устанавливает интерфейс как закрытый, если вы не упоминаете public перед ним.
5. Спасибо, ребята!