我的抽象类有问题。
这是我的界面:
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)时;在主要我得到错误&#34;服务无法解决&#34;。我该如何纠正?
答案 0 :(得分:1)
请先粘贴主要方法。
我的猜测是你忘了实例化一个类的对象:
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
};
答案 1 :(得分:0)
首先,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);
答案 2 :(得分:0)
本主题仅适用于删除。
ArrayList在Ks类型上运行,你们在里面放了一个K型对象...... 如果要实例化它,则应扩展此类,或使其不是抽象的(通过实现接口)。
答案 3 :(得分:0)
您的具体示例似乎与某种webservice api有关。如果没有抽象类的支持代码,我们就无法帮助您。
我认为我们可以从一些与接口和抽象类相关的简单基础开始,因为这似乎是你的问题。
抽象类是根据定义不能创建实例的类。 darijan做了什么&#34;构建&#34;而抽象类的实例是他正在为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"); }
}
现在你已经定义了什么状态定义了一个&#34; Car&#34;对象,然后你将其专门化为&#34; Hondacar&#34;的定义。
希望这是有道理的。
Onto interfaces ...接口是公共API的声明。他们是&#34;合同&#34;实施类必须遵守。根据定义,实现接口的类必须实现该接口上的所有方法。您可以将接口视为仅具有抽象方法的抽象类,其中子类化该抽象类的类将需要覆盖该超类型上的每个方法(这与&#34; @ override&#34;实现的接口上的注释相似虽然很多人可能会劝阻这种思维方式。我不确定你要用你的具体例子做什么,因为它没有任何名字,我甚至可以从中得出推论,所以我无法帮助你。
因此,在整个汽车示例中,类似的设计将是:
interface Car {
String getMake();
}
class HondaCar implements Car {
private static final make = "honda";
@override
public String getMake() { return HondaCar.make; }
}
您可以看到界面根本不提供任何类型的实现,它只是定义了实现类必须提供的公共API。