Я хотел бы назвать функцию расширенного класса. Как это может быть сделано?Функция вызова расширенного класса
class Main{
Function();
}
class Other extends Main{
public void Function() { /* The function code */ }
}
Я хотел бы назвать функцию расширенного класса. Как это может быть сделано?Функция вызова расширенного класса
class Main{
Function();
}
class Other extends Main{
public void Function() { /* The function code */ }
}
Вы можете определить Main
как абстрактный класс, и определить function()
как абстрактный метод, реализованный в Other
подкласса. В какой-то момент вам придется создать экземпляр Other
.
Я использовал экземпляр: Другой экземпляр = новый Другое(); И попробовал позвонить: Другое.Функция() Назад в основной класс. В нем говорится, что он не может найти функцию. Я думаю, что я не понимаю, как это работает. Я много читал об этом. Можете ли вы дать немного больше отзывов о том, как это сделать, пожалуйста? – user1042304
Не могли бы вы предоставить полный источник? Вероятно, вы просто должны называть 'Function()' в основном классе, а не 'Other.Function()', так как Main имеет метод 'Function' - он просто реализуется' Other'. –
class Main {
public void Function() { F2(); }
public abstract void F2();
}
class Other extends Main {
public void F2() { /* code here */ }
}
У вас есть это по-другому. Я хочу, чтобы Main Class вызывал функцию, написанную в другом классе. – user1042304
Обновлено в соответствии с вашими комментариями. –
@ user1042304: no вы никогда не должны этого делать. Пожалуйста, просмотрите мой комментарий к исходному вопросу. Чтобы получить лучшую помощь, расскажите нам подробности, включая общую проблему, которую вы пытаетесь решить, а не то, как вы пытаетесь ее решить. –
public class BaseCls {
void function() {
System.out.println("Base");
}
}
public class ExtCls extends BaseCls {
void function() {
super.function();
System.out.println("ExtCls");
}
public static void main(String args[]) {
new ExtCls().function();
}
}
Класс Main
не имеет особых привилегий в отношении того, что в классе Other
, который не в классе Main
. Кроме того, объект Main
не обязательно является объектом Other
. Поэтому вам необходимо определить поведение, когда объект класса Main
вызывает Function()
. Вы можете
Function()
быть абстрактным, то есть вы не можете создать объект класса Main
и класса Other
вынужден определить Function()
или быть абстрагироваться, илиMain
, который работает для объектов, которые являются Main
s, а не Other
s.В любом случае это приемлемо в зависимости от ситуации. Вы должны дать более подробную информацию, если хотите помочь выбрать, какой из них лучше в вашей ситуации.
Пример:
class Main {
public abstract void Function();
private void SomeFunction() {
Function();
}
}
class Other extends Main {
public void Function() { /* code here */ }
}
или
class Main {
public void function() { /* default code here, can be empty */ };
public void someFunction() {
function();
}
}
class Other extends Main {
public void function() { /* code here */ }
}
class Example {
public void example() {
Main main = new Main();
Other other = new Other();
main.function(); // call the function defined in class Main
other.function(); // call the function defined in class Other
main.someFunction(); // call Main.someFunction, which calls Main.function
other.someFunction(); // call Main.someFunction, which calls Other.function
}
}
Мне понравился второй вариант, однако функция() не изменена расширенным классом. – user1042304
@ user1042304, вы не можете иметь его в обоих направлениях. Либо вы хотите вызвать функцию, которая определена в расширенном классе, либо нет. Если расширенный класс не изменяет функцию, то в каком смысле это «функция расширенного класса»? –
Я хочу вызвать функцию, созданную в расширенном классе. Но ваше предложение здесь показывает функцию() как пустую, определенную в основном классе, а затем снова определенную в расширенном классе. – user1042304
ли вы имеете в виду, возможно, вызвать метод супер, в то есть 'super.Function()'? Ваш вопрос довольно расплывчатый и оставляет много важных деталей. Можете ли вы прояснить ситуацию, поэтому нам не нужно угадывать? –
Что касается вашего комментария: «У вас есть это по-другому. Я хочу, чтобы главный класс вызывал функцию, написанную в другом классе». Нет, нет, вы никогда этого не хотите, поскольку родительский класс должен ** никогда ** не зависят от класса ребенка, когда-либо. Вместо того, чтобы рассказать нам, как в коде вы пытаетесь решить эту проблему, расскажите нам, какую общую проблему вы пытаетесь решить. Я подозреваю, что наследование не участвует в правильном решении. –