0

我有一个关于接口的相当基本的问题,我也很新。我通常会使用重载的构造函数来实例化我的类。我现在正在尝试使用接口并想知道如何填充我的构造函数。我会在我的界面中使用类似 setSomeMethod(arguement1,arguement2) 的东西来填充我的属性吗?

我还想指出我正在使用带有服务注入的“Tapestry5”框架。例子

public class Main {

    @Inject
    private Bicycle bicycle;

    public Main() {
         //Not sure how to pass constructor variables in
         this.bicycle();
    }

}

界面

public interface bicycle {
   public void someMethod(String arg1, String arg2);
}

实现类

public class MountainBike implements bicycle {

   private String arg1;

   private String arg2;

   public MountainBike() {
       //Assuming there is no way to overload this constructor
   }

   public void someMethod(String arg1, String2 arg2) {
       this.arg1 = arg1;
       this.arg2 = arg2;
   }

} 

那么你如何处理扩展类呢?我不确定如何填充扩展类构造函数。

public class MountainBike extends BicycleParts implements bicycle {

   private String arg1;

   private String arg2;

   public MountainBike() {
       //Assuming there is no way to overload this constructor
       //Not sure where to put super either, but clearly won't work here. 
       //super(arg1);            
   }

   public void someMethod(String arg1, String2 arg2) {
       this.arg1 = arg1;
       this.arg2 = arg2;
       //Assuming it doesn't work outside of a constructor, so shouldn't work 
       //here either.   
       //super(arg1);
   }

} 

public class BicycleParts {

    private String arg1;

    public void BicycleParts(String arg1) {
        this.arg1 = arg1;
    }

}

提前致谢。

4

2 回答 2

4

首先,你的bicycle方法应该声明一个返回类型:

public void someMethod(String arg1, String arg2);

接口定义了方法的契约,而不是对象的实例化方式。他们还可以定义静态变量。

someMethod在 MountainBike 构造函数中使用,您可以在构造函数中进行调用:

public MountainBike(String arg1, String arg2) {
   someMethod(arg1, arg2);
}

Wrt,您关于扩展类的问题,超级语句必须作为构造函数中的第一条语句出现,即:

public class MegaMountainBike extends BicycleParts implements bicycle {

   public MegaMountainBike() {

      super("Comfy Saddle");
      // do other stuff
   }
于 2012-08-19T00:56:20.217 回答
2

你似乎很困惑。Java 语言定义了构造函数和方法。构造函数有特殊的限制,不能放在接口中,只要你做一个new语句就会被隐式调用。由于构造函数不能放在接口中,因此通常的做法是使用工厂方法。

于 2012-08-19T01:03:06.890 回答