由于我同时使用Java和C ++,我有时会混淆我的语法。我的问题很简单。我需要创建一个由其他类实现的类(IBuyer)。我正在尝试编写一个函数,它将在我的Main中返回IBuyer的对象,但它表示它的摘要并且无法实例化。我在其他类的定义中添加了abstract,但它仍然不喜欢它。它想要什么?
IBuyer课程:
public interface IBuyer {
String GetName();
String GetPassword();
void SetName(String sName);
void SetPassword(String sPass);
} //end interface IBuyer
另一个名为Standard的课程:
public abstract class Standard implements IBuyer {
private String userSName;
private String userSPass;
private String userSType;
.
.
.
}
My Main.java文件:
public IBuyer GetUser (String name, String password) {
IBuyer newBuyer = new IBuyer(name, password);
return newBuyer;
};
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String uName;
String uPass;
。 。
}
这就是我不需要的语法帮助:
IBuyer newBuyer = new IBuyer(name, password);
谢谢
答案 0 :(得分:3)
正如错误试图告诉您的那样,您无法创建接口或抽象类的实例。
相反,您需要创建一个继承接口的具体类的实例(Standard
)
答案 1 :(得分:1)
根据命名约定,IBuyer
是某种接口,您无法使用new
关键字实例化接口。他们没有实施。
您需要做的是从接口派生,并实例化派生类。
现在你已经在某种程度上做到了,但你已经把它变成了抽象的
public abstract class Standard implements IBuyer {
关键字abstract
表示类本身不能实例化,而应该从中派生出来。
因此,如果您打算实例化Standard
,那么您应该删除abstract
关键字。并使用
IBuyer newBuyer = new Standard(name, password);
您也可以从标准中派生另一个类,例如
public class MyClass extends Standard{
然后使用
IBuyer newBuyer = new MyClass(name, password);