这是我的班级。
public class MyFirstClass
{
private FirstInterface firstInterface;
public FirstInterface getFirstInterface() {
return firstInterface;
}
public void setFirstInterface(FirstInterface firstInterface) {
this.firstInterface = firstInterface;
aMethod()
{
firstInterface.getMyFunction();
System.out.println(firstInterface); // prints some object value here.
{
}
界面:
public abstract interface FirstInterface
{
public abstract getMyFunction();
}
实施类:
public class MyImplClass implements MyFirstClass
{
}
我在这里找不到构造函数或任何其他初始化。有人请告诉我firstInterface
如何初始化的不同方式?
答案 0 :(得分:1)
请参阅初始化类的任何属性(引用或原语),我们始终使用constrcutor或setter方法。
在你的情况下,它可能就像下面
1)constrcutor
public class MyFirstClass
{
private FirstInterface firstInterface;
//other stuff goes here
MyFirstClass(FirstInterface firstInterface)
{
this.firstInterface = firstInterface;
}
}
在某处创建MyFirstClass的对象时,你必须像下面那样调用
MyFirstClass m = new MyFirstClass(new MyImplClass());
2)setter方法
public class MyFirstClass
{
private FirstInterface firstInterface;
public FirstInterface getFirstInterface() {
return firstInterface;
}
public void setFirstInterface(FirstInterface firstInterface) {
this.firstInterface = firstInterface;
}
并初始化,如下所示
MyFirstClass m = new MyFirstClass();
m.setFirstInterface(new MyImplClass());
答案 1 :(得分:1)
让我一步一步向你解释
aMethod
不是方法的正确声明MyImplClass
应该具有界面FirstInterface
所以,让我们看看正确的代码:
我在这里修复了aMethod
的实现,并添加了构造函数。另外,我想您想在aMethod
中执行的操作是打印getMyFunction
public class MyFirstClass
{
private FirstInterface firstInterface;
// Constructor
public MyFirstClass(FirstInterface firstInterface)
{
this.firstInterface = firstInterface;
}
public FirstInterface getFirstInterface()
{
return firstInterface;
}
public void setFirstInterface(FirstInterface firstInterface)
{
this.firstInterface = firstInterface;
}
public void aMethod()
{
System.out.println(firstInterface.getMyFunction());
{
}
接口很好,但默认情况下,接口中的任何方法都声明为abstract
和public
,因此无需添加它们。你忘了定义方法的返回类型,我会假设它返回String
我还在单词abstract
interface
public interface FirstInterface
{
String getMyFunction();
}
这里我添加了未实现的方法(我确信你看到了前面代码的错误)
此外,我还将implements MyFirstClass
替换为implements FirstInterface
public class MyImplClass implements FirstInterface
{
public String getMyFunction()
{
String res = "";
// code
return res;
}
}
最后如何调用所有这些
public class Test
{
public static void main(String[] args)
{
FirstInterface f = new MyImplClass();
MyFirstClass ob = new MyFirstClass(f);
ob.aMethod();
}
}
所以这是一个完整的例子,说明你犯的错误及其更正,我希望这可以给你一个良好的开端。
答案 2 :(得分:0)
aMethod似乎根本不正确。编译错误。
我认为你的其他任何代码都不会编译。
您不需要在界面上使用抽象。
public interface FirstInterface
{
void getMyFunction();
}
我没看到MyImplClass的用途。为什么要扩展MyFirstClass?
我想知道为什么其中一个类没有实现接口。
public class MyFirstClass implements FirstInterface
{
private FirstInterface firstInterface;
public MyFirstClass(FirstInterface f) {
if (f == null) throw new IllegalArgumentException("first interface cannot be null");
this.firstInterface = f;
}
public void getMyFunction() { this.firstInterface.getMyFunction(); }
}