朋友们,我在Java中遇到了一个问题:我想实现一个结构,但是我遇到了一些困难,任何人都可以帮助我。
interface samp1{
method1()
method2()
method3()
}
interface samp2{
method4()
method5()
}
class Samp implements samp1,samp2
{
// this class needs only method1 from interface samp1 and method 4 from interface samp2
// I don't want to override all the methods from interface
}
有人可以为此提出一些解决方案吗?
有没有可用的设计模式?如果是,请提供参考链接。
提前致谢。
答案 0 :(得分:7)
接口是合同。它说“我的类实现了这些方法的所有”。
请参阅:http://docs.oracle.com/javase/tutorial/java/concepts/interface.html
如果您不想这样,请不要使用界面。
答案 1 :(得分:1)
Java 8允许接口中的默认方法,如果在实现接口时未覆盖特定方法,则使用该方法。 例如:
interface MyInterface{
//if a default method is not provided, you have to override it
public int Method1();
public default int Method2(){
return 2;
}
}
public class MyClass{
public static void main(String args[]){
MyInterface in = new MyInterface(){
public int Method1(){
return 0;
}
};
//uses the implemented method
System.out.println(in.Method1()); //prints 0
//uses the default method
System.out.println(in.Method2()); // prints 2
}
}
答案 2 :(得分:0)
将类声明为abstract
,您不需要实现所有方法。但请注意,抽象类无法实例化。
答案 3 :(得分:0)
如果没有更多关于你想要达到的目标的背景,我建议这样做:
interface BaseSamp {
void method1();
void method4();
}
interface Samp1 extends BaseSamp {
void method2();
void method3();
}
interface Samp2 extends BaseSamp {
void method5();
}
class YourClass implements BaseSamp {
....
}
答案 4 :(得分:0)
interface MySpecializedInterface{
public void method1();
public void method4();
}
class YourClass implements MySpecializedInterface{
// now you can implement method1 and method4... :|
}
答案 5 :(得分:0)
实现接口时,没有其他方法可以实现接口中的所有方法。在上面的类“samp”中,您正在实现“samp1”和“samp2”接口,因此您必须在samp类中实现samp1和samp2中的所有方法。
你说过界面的覆盖方法。你不要从接口覆盖方法,你只需要实现方法。
您可以使用抽象类来解决您的问题。
abstract class AbstractSamp implement samp1,samp2{
method1(){...}
method4(){...}
}
你可以在你的samp类中扩展Abstractsamp,如下所示
class samp extends AbstractSamp{
// here you can extend method1() and method4() by inheritence and you can also override them as you want
}