#java #inheritance #abstract-class
#java #наследование #абстрактный класс
Вопрос:
Итак, у меня есть этот класс с именем COL, который содержит следующую функцию:
public class CatalogueOfLife extends EDITPlatform {
private static final String nomatchfound = "there is nothing";
protected String getNoResultsMessage(){
return COL.nomatchfound;
}
А затем интерфейс с именем interface, который имеет эту функцию:
public interface WSInterface {
public boolean matchfound(String noMatchString);
}
Наконец, абстрактный класс с именем platform, который использует обе функции следующим образом:
public abstract class EDITPlatform implements WSInterface{
public boolean matchfound(String noMatchString){
if (noMatchString.contains(getNoResultMessage())){
return true;
}
return false; }
Теперь я хотел бы вызвать matchfound
функцию из основной функции. Я могу использовать только объект COL, но проблема в том, что мне нужно иметь больше, чем один класс, чтобы расширить платформу.
Комментарии:
1. На самом деле, я не понимаю, в чем проблема… Почему вы можете использовать только
COL
объект? Зачем вам нужно иметь несколько расширенных классовPlatform
? Вы хотите сделать что-то вродеCOL col = new Platform();
then be able to docol.matchfound(aString)
?2. Потому что у меня на самом деле будут другие классы, отличные от COL, которые расширят абстрактный класс. так, например, у меня будет
WAP
иCOL
оба расширенияplatform
.. и каждый из них отправитnomatchfound
в функцию другуюplatform
строку.. Мне нужно вызвать функцию с платформы в основном, без необходимости явно указывать, какой подкласс ее вызвал.3. Я серьезно сомневаюсь, что ваш интерфейс вызывается
interface
так, как вы говорите, потому что это зарезервированное ключевое слово Java. Пожалуйста, опубликуйте реальные объявления классов и интерфейсов, а не описывайте их на английском языке; это также расскажет нам, как выглядит ваша иерархия классов.4. интерфейс называется «WSInterface».. Иерархия следующая:
COL extends platform
//platform implements interface
5. Не могли бы вы добавить main с проблемой? Я не вижу проблемы, поэтому, думаю, я не понял вашего вопроса. Если WAP и COL расширяют платформу, у вас может быть коллекция объектов платформы и вызвать obj.matchFound(ввод)… что-то вроде Platform[] platforms= {new WAP(),new COL()}; для каждого (платформа: платформы){platform.matchFound(«некоторая строка»)}
Ответ №1:
Обновлено: ваша проблема в том, что EDITPlatform
у него нет getNoResultMessage()
метода. Поэтому вы не можете его вызвать.
если вам нужно определить этот метод внутри CatalogueOfLife
, вам следует использовать абстрактный метод:
public abstract class EDITPlatform implements WSInterface{
protected abstract String getNoResultMessage();
public boolean matchfound(String noMatchString){
if (noMatchString.contains(getNoResultMessage())){
return true;
}
return false;
}
}
А затем переопределите его в классе solid
public class CatalogueOfLife extends EDITPlatform {
private static final String nomatchfound = "there is nothing";
@Override
protected String getNoResultsMessage(){
return CatalogueOfLife.nomatchfound;
}
}
Наконец
CatalogueOfLife col = new CatalogueOfLife();
boolean matched = col.matchFound(myString);
Комментарии:
1. На самом деле, это COL, который является подклассом Platform!
2. почему вы не публикуете объявления своих классов и интерфейсов
Ответ №2:
Если COL является подклассом Platform, то в коде
if (noMatchString.contains(getNoResultsMessage()))
getNoResultsMessage()
недоступен в платформе.
И поскольку вы внедрили все методы интерфейса Platform
, это не обязательно abstract
Это то, что вы ищете:
class CatalogueOfLife // extends EDITPlatform
{
private static final String nomatchfound = "there is nothing";
protected String getNoResultsMessage() {
return CatalogueOfLife.nomatchfound;
}
}
interface WSInterface {
public boolean matchfound(String noMatchString);
}
class EDITPlatform extends CatalogueOfLife implements WSInterface {
public boolean matchfound(String noMatchString) {
if (noMatchString.contains(getNoResultsMessage()))
return true;
return false;
}
}
public class MainClass {
public static void main(String[] args) {
EDITPlatform plat = new EDITPlatform();
System.out.println(plat.getNoResultsMessage());
System.out.println(plat.matchfound("there is nothing"));
}
}