我没有降低界面的可见性,但我收到 "Cannot reduce visibility" 编译错误
I am not reducing visibility from interface yet I get the "Cannot reduce visibility" compile error
我正在开发一个用于培训的员工管理系统,我制作了一些界面以便我可以在那里工作。
在我处理它时,我的一种方法给了我一个编译器错误,说我无法降低可见性。但我从来没有。
这是给我这个问题的界面和方法。
界面:
interface setter{
boolean setPerformance(int id,int score);
void setAttendance();
boolean setNewEmployee(int id,String passWord,String name);
boolean setRank(int id,int rank);
}
class 方法:
class localSetter implements setter{
localGetter get;
browser browse;
boolean setPerformance(int id,int score) {
if(get.getRank(browse.returnBrowserId()) >= 1 || Integer.toString(score).length() > 2) {
return false;
} else {
String oldValue = localGetter.storage.get(id);
String newValue = oldValue.replaceFirst("Pf:\d\d", "Pf:"+score);
localGetter.storage.put(id,newValue);
return true;
}
}
void setAttendance() {
String oldValue = localGetter.storage.get(browse.returnBrowserId());
int start = oldValue.indexOf("At:");
String newValue = oldValue.substring(0,start + 3) + browse.currentDate() + oldValue.substring(start + 3);
localGetter.storage.put(browse.returnBrowserId(),newValue);
}
boolean setNewEmployee(int id,String passWord,String name) {
if(get.getRank(browse.returnBrowserId()) > 2) {
String value = "Ps:" + passWord + "Nm:" + name + "Pf:0";
localGetter.storage.put(id, value);
return true;
} else {
return false;
}
}
boolean setRank(int id, int rank) {
if(localGetter.storage.isEmpty() || get.getRank(browse.returnBrowserId()) >= 3) {
if(localGetter.storage.containsKey(id) == false) {
return false;
} else {
String oldValue = localGetter.storage.get(id);
String newValue = oldValue.replaceAll("Rk:\d+","Rk:" + rank);
localGetter.storage.put(id, newValue);
return true;
}
} else {
return false;
}
}
如您所见,接口和实现的方法都没有可见性修饰符,但它一直告诉我添加 "public" 修饰符。
请有人帮助我。谢谢
接口中的方法是隐式的public
。在 类 中,如果您不指定访问修饰符,则该方法只能由同一包中的 类 访问,从而降低该方法的可见性。
TL;DR - 实现接口方法的方法,必须是 public
.
我正在开发一个用于培训的员工管理系统,我制作了一些界面以便我可以在那里工作。
在我处理它时,我的一种方法给了我一个编译器错误,说我无法降低可见性。但我从来没有。
这是给我这个问题的界面和方法。
界面:
interface setter{
boolean setPerformance(int id,int score);
void setAttendance();
boolean setNewEmployee(int id,String passWord,String name);
boolean setRank(int id,int rank);
}
class 方法:
class localSetter implements setter{
localGetter get;
browser browse;
boolean setPerformance(int id,int score) {
if(get.getRank(browse.returnBrowserId()) >= 1 || Integer.toString(score).length() > 2) {
return false;
} else {
String oldValue = localGetter.storage.get(id);
String newValue = oldValue.replaceFirst("Pf:\d\d", "Pf:"+score);
localGetter.storage.put(id,newValue);
return true;
}
}
void setAttendance() {
String oldValue = localGetter.storage.get(browse.returnBrowserId());
int start = oldValue.indexOf("At:");
String newValue = oldValue.substring(0,start + 3) + browse.currentDate() + oldValue.substring(start + 3);
localGetter.storage.put(browse.returnBrowserId(),newValue);
}
boolean setNewEmployee(int id,String passWord,String name) {
if(get.getRank(browse.returnBrowserId()) > 2) {
String value = "Ps:" + passWord + "Nm:" + name + "Pf:0";
localGetter.storage.put(id, value);
return true;
} else {
return false;
}
}
boolean setRank(int id, int rank) {
if(localGetter.storage.isEmpty() || get.getRank(browse.returnBrowserId()) >= 3) {
if(localGetter.storage.containsKey(id) == false) {
return false;
} else {
String oldValue = localGetter.storage.get(id);
String newValue = oldValue.replaceAll("Rk:\d+","Rk:" + rank);
localGetter.storage.put(id, newValue);
return true;
}
} else {
return false;
}
}
如您所见,接口和实现的方法都没有可见性修饰符,但它一直告诉我添加 "public" 修饰符。
请有人帮助我。谢谢
接口中的方法是隐式的public
。在 类 中,如果您不指定访问修饰符,则该方法只能由同一包中的 类 访问,从而降低该方法的可见性。
TL;DR - 实现接口方法的方法,必须是 public
.