2013-12-09 5 views
-4

Поскольку я беру Java и C++ одновременно, я иногда путаю свой синтаксис. Моя проблема проста. Мне нужно создать класс (IBuyer), который реализуется другими классами. Я пытаюсь написать функцию, которая вернет объект IBuyer в моем Main, но он говорит об абстракции и не может быть создан. Я добавляю абстракцию к определению других классов, но это все равно не нравится. Чего он хочет?Каков правильный синтаксис для создания объекта из реализованного класса

IBuyer класс:

public interface IBuyer {  
    String GetName(); 
    String GetPassword(); 
    void SetName(String sName); 
    void SetPassword(String sPass);  
} //end interface IBuyer 

Другой класс названный стандарт:

public abstract class Standard implements IBuyer {  
    private String userSName; 
    private String userSPass; 
    private String userSType; 

. 
. 
. 
} 

Мой 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); 

Спасибо

+4

Вы можете только создать экземпляр конкретного класса, а не абстрактный один. – Henry

+0

Вы также не можете создавать такие интерфейсы. – kviiri

+0

Как вы думаете, что делает линия? – SLaks

ответ

3

Поскольку ошибка пытается сказать вам, вы не можете создать экземпляр интерфейса или абстрактного класса.

Вместо этого вам нужно создать экземпляр конкретного класса, который наследует интерфейс (Standard)

+0

Упрощенный, но 'Стандарт' в настоящее время является« абстрактным », а не конкретным. – kviiri

1

Судя по именованию, IBuyer представляет собой интерфейс какого-то, и вы не можете создать экземпляр интерфейса с new ключевое слово. У них нет реализации.

Что вам нужно сделать, это получить из интерфейса и создать экземпляр производного класса.

теперь вы сделали это в некоторой степени, но вы сделали это абстрактный

public abstract class Standard implements IBuyer { 

ключевое слово abstract означает, что сам класс не может быть инстанциирован, вместо этого, она должна быть получена из.

Итак, если вы намеревались создать экземпляр Standard s, чем вам следует избавиться от ключевого слова abstract. и использовать

IBuyer newBuyer = new Standard(name, password); 

можно альтернативно получить еще один класс от стандарта, таких как

public class MyClass extends Standard{ 

, а затем использовать

IBuyer newBuyer = new MyClass(name, password); 
+0

Это все равно нужен конструктор. –

+0

Спасибо, Сэм, это имеет смысл. Это не помогает в том, что инструкции расплывчаты, и книга объясняет это так, как будто вы начинаете программировать в java, чего я не знаю, но я думаю, что получил. – user3084466

Смежные вопросы