我的抽象类有问题。
下面是我的界面:package dovilesUzduotis4;
import java.util.ArrayList;
public interface Interface1 {
void a(ArrayList<K> kM, String g);
}
和抽象类:
package dovilesUzduotis4;
import java.util.ArrayList;
public abstract class Service implements Interface1 {
public void iK(ArrayList<Ks> kM, String g){
K aK = new K(g);
kM.add(aK);
}
}
但是当我尝试使用service.iK(kM,g);在主要情况下,我得到错误"服务无法解决"。我怎样才能改正呢?
请先粘贴主方法
我猜你忘记实例化类的对象了:
Service service= new Service() { //create an object of the class
}; //brackets are there because the Service is abstract class and I am redefining it.
service.iK(kM, g); //invoke a method an that object
现在,我不认为Service
类需要抽象。如果您希望用户以适合其需要的方式实现标记为抽象的类的一个(或多个)方法,则呈现类抽象。不用说,我在你的Service
类中没有看到任何抽象方法。
结果是:
如果类不是抽象的,则实例化为:
Service service= new Service();
如果类是抽象的,必须在以下位置重新定义:
Service service= new Service() {
//here you could implement an abstract method or redefine an existing one
};
首先,Java是case-sensitive
,这意味着service
和Service
是不同的东西。您刚刚得到的错误:service cannot be resolved
说,期望service
类,而您有Service
类。
请记住,类名应该实现CamelCase
,而变量名应该以小写字母开头。
调用方法必须:
- 创建对象并访问其方法
- 或者使方法
static
在第一种情况下,你必须实现一个子类:
SubService extends Service {}
,因为服务是abstract
,并且期望被扩展。
:
SubService service = new SubService();
service.method();
对于第二种情况,您不必扩展类,可以调用静态方法。
public abstract class Service implements Interface1 {
public static void iK(ArrayList<Ks> kM, String g){ //static method
K aK = new K(g);
kM.add(aK);
}
}
:
Service.iK(arg0, arg1);
此主题仅适合删除。
ArrayList操作的是K类型,而你们在里面放了一个K类型的对象…你应该扩展这个类,或者使它不抽象(通过实现接口),如果你想实例化它。
您的具体示例似乎与某种web服务api有关。如果没有抽象类的后台代码,我们无法真正帮助您。
我想我们可以从一些与接口和抽象类相关的简单基础开始,因为这似乎是你的问题。
抽象类是根据定义不能创建实例的类。darijan为"构造"抽象类的实例所做的是为Service抽象类型创建一个匿名的内部类。
Service service= new Service() { }; // notice the curly braces, this is an anonymous class definition
关于抽象类和接口的最佳实践有许多不同的思想流派和观点。在我看来,我们在这里真正讨论的是OOP的核心。抽象类旨在提供具有或不具有具体实现的api,以便可以为特定目的重写和专门化它们。
这是一个很好的例子:
public class Car {
String make;
public car (String make) { this.make = make; }
}
public class Hondacar extends Car{
public Hondacar() { super("honda"); }
}
现在您已经定义了哪些州定义了"Car"对象,然后您将其专门化到"Hondacar"的定义中。
希望这有意义。
到接口……接口是公共API的声明。它们是实现类必须遵守的"契约"。根据定义,实现接口的类必须实现该接口上的所有方法。您可以将接口视为只有抽象方法的抽象类,其中抽象类的子类将需要覆盖该超类型上的每个方法(这与实现的接口方法上的"@override"注释相似),尽管许多人可能不赞成这种想法。我不确定你想用你的具体例子做什么,因为它没有任何我可以推断的名字,所以我不能真正帮助你。
因此,在整个汽车的例子中,类似的设计将是:
interface Car {
String getMake();
}
class HondaCar implements Car {
private static final make = "honda";
@override
public String getMake() { return HondaCar.make; }
}
您可以看到接口根本不提供任何类型的实现,它仅仅定义了实现类必须提供的公共API。