Как вызвать метод из другого класса java
Перейти к содержимому

Как вызвать метод из другого класса java

Как мне вызвать метод из другого класса?

Есть два класса, в одном из которых есть метод мэйн, в другом классе тоже есть методы. Как мне из класса. где есть метод мэйн вызвать методы другого класса?

  • Вопрос задан более трёх лет назад
  • 44206 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 5
Михаил @cocain1988

Если я правильно понимаю то тебе нужно вначале объявить класс, метод которого ты хочешь вызвать. К примеру так:

class Apple < public String color; public String color()< return color>> class Shop < public static void main(String[] args)< Apple a = new Apple(); System.out.println( a.color() ); // Данный метод должен вывести цвет. >>

А более подробно лучше конечно прочитать документацию по тем ссылкам которые указывались ранее.

Ответ написан более трёх лет назад
Нравится 5 1 комментарий
Спасибо, хоть один добрый человек объяснил для чайников
software engineer
Пройди туториал чтоли?
docs.oracle.com/javase/tutorial
Ответ написан более трёх лет назад
Нравится 3 1 комментарий
olololosh @olololosh Автор вопроса
спасибо, сам вспомнил, а то посреди ночи голова уже не варит, не подумав, сразу вопросы задаю
localghost @localghost

И как-то никто, по-моему, даже не намекнул на суть.
КМК, не хватает понимания, что (обычно) нельзя вызвать просто метод класса. Класс — это шаблон, по которому создаются объекты. Чтобы вызвать «метод класса», надо создать объект этого класса, а потом обратиться к объекту, мол, дорогой, вызови-ка свой метод такой-то.

Использование классов внутри других классов

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

Почему мы не хотим наследовать?

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

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

Давайте посмотрим на практическом примере. Пусть у нас дан следующий класс Arr , в объект которого мы можем добавлять числа с помощью метода add :

Давайте теперь добавим в наш класс метод, который будет находить сумму квадратов элементов и прибавлять к ней сумму кубов элементов.

Пусть у нас уже существует класс SumHelper , имеющий методы для нахождения сумм элементов массивов:

Логично будет не реализовывать нужные нам методы еще раз в классе Arr , а воспользоваться методами класса SumHelper внутри класса Arr .

Для этого в классе Arr внутри конструктора создадим объект класса SumHelper и запишем его в свойство sumHelper :

Теперь внутри Arr доступно свойство $this->sumHelper , в котором хранится объект класса SumHelper с его публичными методами и свойствами (если бы публичные свойства были, сейчас их там нет, только публичные методы).

Создадим теперь в классе Arr метод getSum23 , который будет находить сумму квадратов элементов и прибавлять к ней сумму кубов элементов, используя методы класса SumHelper :

sumHelper = new SumHelper; > // Находим сумму квадратов и кубов элементов массива: public function getSum23() < // Для краткости запишем $this->nums в переменную: $nums = $this->nums; // Найдем описанную сумму: return $this->sumHelper->getSum2($nums) + $this->sumHelper->getSum3($nums); > public function add($number) < $this->nums[] = $number; > > ?>

Давайте воспользуемся созданным классом Arr :

add(1); // добавляем в массив число 1 $arr->add(2); // добавляем в массив число 2 $arr->add(3); // добавляем в массив число 3 // Находим сумму квадратов и кубов: echo $arr->getSum23(); ?>

Самостоятельно повторите описанные мною классы Arr и SumHelper .

Создайте класс AvgHelper с методом getAvg , который параметром будет принимать массив и возвращать среднее арифметическое этого массива (сумма элементов делить на количество).

Добавьте в класс AvgHelper еще и метод getMeanSquare , который параметром будет принимать массив и возвращать среднее квадратичное этого массива (квадратный корень, извлеченный из суммы квадратов элементов, деленной на количество).

Добавьте в класс Arr метод getAvgMeanSum , который будет находить сумму среднего арифметического и среднего квадратичного из массива $this->nums .

Вызов метода с другого класса

Вопрос: Как вызвать Menu в WindowApp что бы в этом диалоговом окне была вкладка Menu, или я намутил что-то в Menu классе, просто не могу понять как правильно построить структуру классов, с возможностью вызова методов одного в другого.. Спасибо за помощь!

Отслеживать
задан 3 дек 2020 в 23:34
user416946 user416946
9 9 9 бронзовых знаков
Где происходит вызов метода?
4 дек 2020 в 8:32
В том то и дело, я не могу понять где правильно вызвать метод с класса Menu.
4 дек 2020 в 11:11
Что значит правильно или неправильно. Надо писать конкретно.
4 дек 2020 в 20:50

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

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

Второй принцип: статические поля использовать только в крайних случаях, применять обычные поля, передавать значения в конструкторы.

Поэтому пример правится по шагам:

  • статический jFrame убирается, вместо него будет использоваться this , передаваемый в конструкторы
  • Menu не наследуется от MainWindow (меню же НЕ является окном)
  • но в меню нужен доступ до окна ( JFrame ), поэтому пусть оно будет полем в Menu
  • для инициализации поля с JFrame в Menu нужен конструктор
  • и добавить вызов addMenu у созданного объекта.

Итого получается такой набросок из исходного кода:

public class WindowApp extends JFrame < private String title = "AdventureTime The Game"; private Menu menu = new Menu(this); WindowApp() < setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(550, 380); setLocationRelativeTo(null); setResizable(false); setTitle(title); menu.addMenu(); >> public class Menu < JMenuBar jMenuBar = new JMenuBar(); JMenu file = new JMenu("File"); JFrame jFrame; public Menu(JFrame jFrame) < this.jFrame = jFrame; >void addMenu() < jMenuBar.add(file); jFrame.setJMenuBar(jMenuBar); jFrame.revalidate(); >> 

Это только рабочий набросок. Но для развития подойдёт. Например, revalidate здесь не нужен, меню нужно развить, добавив пункты, setVisible обычно лучше делать после выставления всех параметров окна и т.д. и т.п.

Как вызвать метод из другого класса java

Ну еще можно сделать свой класс наследником класса программ. что-то вроде такого(правда не знаю сработает ли,но должно..))

namespace MySpase < public class Program < public void ShowText(string text) \\вызвать этот метод < writeline(text); >> static class Function:Program < void myFunction() < this.ShowText(" "); >> >

Не давай организму поблажки, каждый день тренируй его в шашки..
Форумчанин
Регистрация: 10.06.2010
Сообщений: 239

Спасибо, помогло.
Только пока ковырялся решил сделать графический интерфейс и теперь мне надо вывести результат в текстбокс ну или в лейбл, но я не могу получить доступ к элементам формы из своего класса (static class Function), а только из класса формы (public partial class Form1 : Form).
Что делать?

Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
Дружите с Linq 😉
Форумчанин
Регистрация: 15.10.2008
Сообщений: 822
Заведи в своем классе экземпляр класса Form и в метод своего класса передавай форму Form1.
Не давай организму поблажки, каждый день тренируй его в шашки..
Форумчанин
Регистрация: 10.06.2010
Сообщений: 239

Мде, раньше как то попроще было. Что то я пока не проникся новой логикой програмирования. Видимо преимущества начинаются только на больших проектах.
Поду дальше читать книжку.

Чтобы слова не расходились с делом, нужно молчать и ничего не делать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *