Вызов метода с другого класса
Вопрос: Как вызвать 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 обычно лучше делать после выставления всех параметров окна и т.д. и т.п.
#6. Вводный курс по JAVA. Методы
Методы в Java — это законченная последовательность действий (инструкций), направленных на решение отдельной задачи. По сути, это функции (они же процедуры, подпрограммы) более ранних, не ООП языков. Только эти функции являются членами классов и для различия с обычными функциями, согласно терминологии объектно-ориентированного программирования, называются методами.
Методы определяются всегда внутри классов:
public class Main < public static void foo() < // Тело метода >>
foo — это метод, который мы определили в классе Main, давайте его рассмотрим.
- public – тип доступа (метод может вызываться из другого класса). Существуют и другие типы доступа, к примеру private (метод доступен только внутри класса) и protected (о нем мы будем говорить позже).
- static означает что метод статический, он принадлежит классу Main, а не конкретному экземпляру класса Main. Мы можем вызвать этот метод из другого класса так: Main.foo() .
- void значит, что этот метод не возвращает значение. Методы могут возвращать значение в Java и оно должно быть определено при объявлении метода. Однако, вы можете использовать return просто для выхода из метода.
- Этот метод не получает никаких аргументов, но методы java могут получать аргументы, как мы увидим далее на примерах.
Если тип возвращаемого значения не void, в теле метода должен быть хотя бы один оператор
return выражение;
где тип выражения должен совпадать с типом возвращаемого значения. Этот оператор возвращает результат вычисления выражения в точку вызова метода.
Если тип возвращаемого значения – void, возврат из метода выполняется либо после выполнения последнего оператора тела метода, либо в результате выполнения оператора
return;
(таких операторов в теле метода может быть несколько).
Пример объявления метода, возвращающего значение типа int – сумму двух своих параметров типа int:
int sum(int a, int b)
При вызове метода, например, sum (5, 3) , параметры 5 и 3 передаются в метод, как значения соответственно a и b , и оператор вызова метода sum (5, 3) – заменяется значением, возвращаемым методом ( 8 ).
В отличие от языка C, в котором тип параметра, задаваемого при вызове, приводится к типу параметра в объявлении функции, тип задаваемого параметра в Java должен строго соответствовать типу параметра в объявлении метода, поэтому вызов метода sum(1.5, 8) приведет к ошибке при компиляции программы.
Не статические методы
Не статические методы в Java используются чаще, чем статические методы. Эти методы могут принадлежать любому объекту, экземпляру класса, а не всему классу.
Не статические методы могут получать доступ и изменять поля объекта.
public class Student < private String name; public String getName() < return name; >public void setName(String name) < this.name = name; >>
Вызов методов требует экземпляра класса Student .
Student s = new Student(); s.setName("Danielle"); String name = s.getName(); Student.setName("Bob"); // Не будет работать! Student.getName(); // Не будет работать!
Перегруженные методы
В языке Java в пределах одного класса можно определить два или более методов, которые совместно используют одно и то же имя, но имеют разное количество параметров. Когда это имеет место, методы называют перегруженными, а о процессе говорят как о перегрузке метода (method overloading).
Когда метод вызывается, то по количеству параметров и/или их типам среда выполнения Java определяет, какую именно версию перегруженного метода надо вызывать (тип возвращаемого значения во внимание не принимается, хотя, в принципе, он тоже может отличаться у разных версий перегруженных методов).
double sum(double a, double b)
вместе с объявленным ранее методом int sum(int a, int b)составляют пару перегруженных методов и при вызове sum(5, 8) будет вызван первый метод, а при вызове sum(5.0, 8.0) будет вызван второй метод.
По умолчанию метод, как и переменная, доступен только классам в том же пакете (наборе классов), что и исходный класс. Если перед возвращаемым типом задан модификатор доступа public, то метод является глобальным и доступен любым объектам, а модификатор private означает, что метод доступен в том классе, в котором он был объявлен, т.е. метод инкапсулирован в данном классе.
Переопределение методов
Кроме перегрузки существует также замещение, или переопределение методов (англ. overriding). Замещение происходит, когда класс потомок (подкласс) определяет некоторый метод, который уже есть в родительском классе(суперклассе), таким образом новый метод заменяет метод суперкласса. У нового метода подкласса должны быть те же параметры или сигнатура, тип возвращаемого результата, что и у метода родительского класса.
public class Thought < public void message() < System.out.println("Я себя чувствую как стрекоза, попавшая в параллельную вселенную."); >> public class Advice extends Thought < @Override // Аннотация @Override с Java 5 является необязательной, но весьма полезной public void message() < System.out.println("Внимание: Даты в календаре ближе, чем кажутся."); >>
Класс Thought представляет собой суперкласс и обеспечивает вызов метода message() . Подкласс, называемый Advice , наследует каждый метод класса Thought . Однако, класс Advice переопределяет метод message() , замещая функционал, описанный в классе Thought .
В Java, когда подкласс содержит метод, переопределяющий метод суперкласса, то он может помимо своего метода вызывать и метод суперкласса при помощи ключевого слова super.
Например, нижеследующий вариант выводит оба сообщения при вызове метода подкласса:
public class Advice extends Thought < @Override public void message() < System.out.println("Внимание: Даты в календаре ближе, чем кажутся."); super.message(); // Вызов версии метода родительского класса >>
Существуют методы, которые подкласс не может переопределять. Например, в Java метод, объявленный с ключевым словом final , не может быть переопределён. Методы, объявленные как private или static не могут быть переопределены, поскольку это соответствует неявному использованию final .
Резюме
- Каждый java-метод должен быть внутри класса
- Статические методы принадлежат классу, а не статические методы принадлежат объектам, экземплярам класса
- В пределах одного класса может быть два и более методов с одинаковыми именами, но разным набором параметров (перегрузка метода)
- Класс-потомок может обеспечивать свою реализацию метода, уже реализованного в одном из родительских классов (переопределение метода)
Упражнение
Написать метод printFullName класса Student, который выводит полное ФИО студента.
Выполните упражнение, прежде чем перейти к следующему уроку.
Вызвать метод с другого класса без его экземпляра.
Здравствуйте. Пытаюсь постигнуть азы науки и создаю легкую программулинку, так вот, создал несколько классов, один из них, так сказать, главный, где находится метод main, в другом класс, где находятся объекты, а в третьем файле, создал объект из другого класса и методы, которые воздействуют на этот объект. Соответственно вопрос, как в мейн классе мне обратиться к этим методам?
Суть в том, что я не создаю экземпляр того класса, там, так сказать, описана логика работы, геттеры и сеттеры для моего объекта.
Подитожу: как вызвать из класса А, метод, что находится в классе В который содержит экземпляр класса С? Или так делать нельзя?
Заранее спасибо.
Лучший ответ
попробуй статический класс создать
Blynnyi YevheniiЗнаток (426) 5 лет назад
Все равно не вызывается. Получается так, 3 класса это 3 разных файла.
Мейн, А и В.
В мейне я пытаюсь вызвать метод класса А. В классе только методы и переменные и экземпляр класса В.
Даже когда создаю в классе А еще 1 вложенный статик класс, все равно не вызывается из мейна.
MySpringМастер (1616) 5 лет назад
Метод внутри класса B Должен быть статическим, тогда при его вызове не нужно будет создавать объект класса B.
То, что внутри этого метода будет находится объект C не играет роли, ты все равно его сможешь вызвать.
Остальные ответы
Если ты хочешь иметь возможность обращаться к полям класса без создания экземпляра этого класса, то эти поля должны быть статическими, к не-статическим полям можно обращаться только через экземпляр класса
Так что, если у тебя есть что-то вроде
class B public static void staticMethod() >
public void nonStaticMethod() >
>
то из класса Main ты можешь обращаться к ним так:
class Main public static void main(String[] args) B.staticMethod();
B b = new B();
b.nonStaticMethod();
>
>
Как вызвать метод в Java
wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали авторы-волонтеры.
Количество просмотров этой статьи: 126 431.
В этой статье:
Вам нужно многое выучить, чтобы научиться программировать на Java. Классы, методы, исключения, конструкторы, переменные и так далее — все это может едва ли не свести с ума. Учиться всему лучше поэтапно, и сейчас мы расскажем вам про методы.
Метод — это эквивалент функции в С-подобных языках. Методы нужны для повторного использования кода. Набор выражений создает метод, метод же может быть вызван другим выражением. Будучи вызванными, все выражения, являющиеся частью метода, будут выполнены. Например: » public static void methodExample() <> «. В нем нет кода, но есть ключевые слова (3) перед названием метода, а именно public , static и void .
![]()
Слово public перед названием метода значит, что метод можно вызвать откуда угодно, включая другие классы и даже файлы/пакеты, если вы импортируете соответствующий класс. Заменить public можно следующими вариантами: protected и private . Если метод protected , то только этот класс и подклассы (классы, созданные на основе класса) могут вызывать данный метод. Если метод private , то он может быть вызван только внутри класса. Последнее ключевое слово, в общем-то, даже не слово. Оно используется, когда вместо public , protected или private у вас ничего. Это вызов по умолчанию, что означает, что лишь классы в том же пакете могут взвывать этот метод.
![]()
Второе ключевое слово, static , означает, что метод принадлежит классу, а не примеру класса (объекту). Статические методы могут вызывать с помощью имени класса: » ExampleClass.methodExample() «. Впрочем, если ключевое слово static отсутствует там, тогда метод может быть вызван только через объект. Например, если класса называется ExampleObject , и у него есть конструктор (для создания объектов), тогда мы может создать новый объект, напечатав ExampleObject obj = new ExampleObject(); , и вызвать метод так » obj.methodExample(); «.
![]()
Последнее слово перед название метода — void . Слово void значит, что метод ничего не возвращает (не отдает ничего при вызове). Если вы хотите, чтобы при вызове метод что-то да отдавал, тогда просто замените слово void типом данных объекта или примитива, который вы хотите получать. Затем просто добавьте return плюс объект того типа где-то ближе к концу кода метода.
![]()
Вызывая метод, который что-то возвращает, вы можете использовать возвращаемое им. Например, если someMethod() возвращает целое число, тогда вы можете задать целое число для того, что возвращается, так: » int a = someMethod(); «
![]()
Некоторые методы требуют параметры. Метод, требующий параметр целого числа, выглядит так: someMethod(int a) Используя подобный метод, вы напишите имя метода, затем целое число в скобках: someMethod(5) или someMethod(n) если n — целое число.
![]()
У методов может быть несколько разделенных запятыми параметров. Если метод someMethod требует двух параметров, int a и Object obj , он будет выглядеть так: » someMethod(int a, Object obj) «. Чтобы использовать этот метод, его надо вызвать по имени метода, после которого нужно написать целое число и объект в скобках: someMethod(4, thing) где thing — это Object .
