2017-02-05 13 views
0

Я работал над этим вопросом, и мне было интересно, что у меня все получилось.Применение концепции интерфейсов и абстрактных классов в программе

Рассмотрите интерфейс MusicInterface, который имеет постоянный член данных, TYPE, , который равен «Nice Music» и метод play(), который отображает TYPE на консоли . Класс StringedInstrument реализует интерфейс MusicInstrument.

i) Напишите код Java для интерфейса MusicInstrument.

ii) Реализовать абстрактный класс StringedInstrument с переменными numberOfStrings типа integer и имя типа String. No В этом пункте возможна реализация метода.

III) Реализация конкретного класса электрогитары, который представляет собой подкласс StringedInstrument, имеющий конструктор, который инициализирует имя и numberOfStrings и соответствующие методы.

MusicInstrument класс

public interface MusicInterface { 

    final String TYPE= "Nice Music"; 

    public void play(); 

} 

класс StringedInstrument

public abstract class StringedInstrument implements MusicInterface { 
    public int numberOfStrings; 
    public String name; 
} 

электрогитара класс

public class ElectricGuitar extends StringedInstrument{ 

    public ElectricGuitar(int numberOfString, String name){ 
    super(); 
    } 

@Override 
public void play() { 

    System.out.println("The type of music is: "+TYPE); 
    } 

} 

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

+0

Этот вопрос не соответствует теме для этого сайта. –

+0

Другими словами, «я правильно понял», это не очень специфично и не полезно для будущих посетителей. –

+1

@HovercraftFullOfEels Я пошел в основном на основе мнения. Это больше вопрос для обзора кода. возможно, –

ответ

-1
public abstract class StringedInstrument implements MusicInterface { 
public int numberOfStrings; 
public String name; 

public StringedInstrument() 
{ 
    // This gets called by ElectricGuitar() constructor 
} 

@Override 
public void play() 
{ 
    // I meant, you can also HAVE AN IMPLEMENTATION HERE. My Corrections 
    // OMITTING THIS METHOD BODY DECLARATION, WON'T CAUSE COMPILE ERRORS 
    // THAT WAS A BAD JOKE BY ME 
    System.out.println("The type of music is: "+TYPE + " In " + this.getClass().getSimpleName()); 
} 


} 

Ваш код стоит твердых

+0

Но во второй части вопросов он упомянул, что в классе StringedInstrument реализация play() невозможна. – Tia

+0

Я очень сожалею об этом, вы были абсолютно правы, я на самом деле путал эту абстрактную перегрузку интерфейса класса при реализации, это происходит только в конкретной реализации. Моя вина. Вы хорошо пойдете за кодом, это абсолютно нормально – ShayHaned

+0

Это совершенно нормально;) Спасибо за вашу помощь – Tia

1

Некоторые заметки для написания обычного кода Java:

Изменить видимость объявленных полей в абстрактном классе StringedInstrument быть, по крайней мере protected (или пакет-частное) , Эти поля являются частью состояния класса и должны быть надлежащим образом инкапсулированы.

Кроме того, ваш конструктор ElectricGuitar является бесполезным. Он получает 2 параметра, которые никогда не используются, и соответствующие поля StringedInstrument остаются неинициализированными. Вы должны создать соответствующий конструктор в StringedInstrument и инициализировать numberOfStrings и name поля в нем, что-то вроде:

public StringedInstrument(int numberOfString, String name){ 
    this.numberOfStrings = numberOfStrings; 
    this.name = name; 
} 

и ElectricGuitar будет использовать этот супер-конструктор:

public ElectricGuitar(int numberOfStrings, String name){ 
    super(numberOfStrings, name); 
} 
1

Там нет особых причин для class StringedInstrument является абстрактным, если он не содержит полиморфных абстрактных методов. Я не думаю, что этот контекст удовлетворит соответствующий пример абстрактной целостности.

Это, как говорится, сделать ли это абстрактный или нет, вы должны включить в StringedInstrument:

public StringedInstrument(int numberOfStrings, String name) { 
    this.numberOfStrings = numberOfStrings; 
    this.name = name; 
} 

и Электрогитара:

public ElectricGuitar(int numberOfStrings, String name) { 
    super(numberOfStrings, name); 
} 

Я полагаю, что если вы поставите TYPE в StringedInstrument вы можете сделать:

public abstract String getType(); 

, а затем в вашем конкретном классе (ElectricGui tar) настроить то, что получает getType(), что также довольно слабое использование интерфейса.

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

  • Нет связанных вопросов^_^