我有这种用例
interface i {
void method1();
void method2();
}
class A implements i {
void method1() {
System.out.println("Method1 A ..");
}
void method2() {
System.out.println("Method2 A ..");
}
}
class B implements i {
void method1() {
System.out.println("Method1 B ..");
}
//Assume : B does not know how to implement method2
//void method2() {
//}
}
我知道B类可以是抽象的,而不是为接口i实现method2。
一般的做法是,如果我不希望我的类B是抽象的,如果它没有方法2的任何实现,则从method2抛出异常?
答案 0 :(得分:4)
如果您没有完全实现接口的所有必需方法,则不应该实现该接口。看来你实际上要做的是:
interface top
{
void method1();
}
interface next extends top
{
void method2();
}
class A implements next
{
public void method1()
{
... something ...
}
public void method2()
{
... something ...
}
}
class B implements top
{
public void method1()
{
... something ...
}
}
答案 1 :(得分:2)
如果您不打算从接口实现方法,则可以抛出UnsupportedOperationException。实际上,如果可能的话,应该避免这种情况,也许重新考虑设计。
答案 2 :(得分:1)
如果B不知道如何实现method2,那么你的界面有点不对劲。你需要一个更通用的接口,没有method2,也许还需要一个扩展接口,它包含方法,但不是由B实现的。
答案 3 :(得分:0)
标准Java库中有一些先例。一些最值得注意的是来自Iterator接口的“remove”方法,它抛出UnsupportedOperationException。记住要记录界面,说允许抛出此异常。