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

Я пишу проект Java, который имеет три разных класса. Это то, что у меня есть до сих пор. Я просто застрял в том, как вы вызываете функцию метода из другого класса в другой класс. Я уже написал 2 класса. Я получил класс «Дата» и класс «Температурный диапазон»; теперь я пытаюсь вызвать эти 2 класса в класс WeatherRecord. Я не уверен, что правильно объясняю.

public class WeatherRecord //implements Record
{

    private String TemperatureRangetoday;
    private String TemperatureRangenormal;
    private String TemperatureRangerecord;


    public static void main (String[] args){

    }
}

это другой класс

public class Date
{
    public static String date(String date, String month, String year){
        String rdate = date + " " +month + " " +year;
        return rdate;   
    }
}

А вот еще класс

public class TemperatureRange
{
    public static String TempRange (String high, String low){

        String rTempRange = high +"high" + " "+low+"low";
        return rTempRange;

    }
}

person highspeedpog    schedule 09.10.2014    source источник


Ответы (6)


Вам нужна ссылка на класс, содержащий метод, который вы хотите вызвать. Допустим, у нас есть два класса, A и B. B имеет метод, который вы хотите вызвать из A. Класс A будет выглядеть так:

public class A
{
    B b; // A reference to B

    b = new B(); // Creating object of class B

    b.doSomething();  // Calling a method contained in class B from class A
}

B, содержащий метод doSomething(), будет выглядеть так:

public class B
{
    public void doSomething()
    {
        System.out.println("Look, I'm doing something in class B!");
    }
}
person MarsAtomic    schedule 09.10.2014
comment
В этой связи я не думаю, что ему следует использовать статические методы, поскольку он создает экземпляры Date и TemperatureRange. Статические методы будут означать, что они будут принадлежать классу, в котором они находятся, а не экземпляру. - person tenkii; 09.10.2014
comment
Я подозреваю, что он столкнулся с некоторыми проблемами, пытаясь вызвать нестатические методы из своего основного метода. Интересно, мой пример слишком общий, и я должен был настроить его специально для его кода, но я всегда опасаюсь кормления с ложки... - person MarsAtomic; 09.10.2014
comment
Является ли это шаблоном проектирования, который называется внедрением зависимостей? Или это что-то совершенно не связанное? - person random_coder_101; 21.07.2017
comment
@ZaidHumayun Приведенный мной код демонстрирует простую зависимость. Внедрение зависимостей принимает несколько различных форм, но в данном случае включает передачу ссылки на существующий класс B в класс A. Например, если класс A имеет конструктор public A(B instanceOfB) { this.b = instanceOfB }. Термин injection указывает на то, что что-то вставляется (в данном случае ссылка на объект) во что-то другое (другой объект). - person MarsAtomic; 24.07.2017

В классе WeatherRecord:

Сначала импортируйте класс, если они находятся в другом пакете, иначе этот оператор не требуется

Import <path>.ClassName



Затем просто сошлитесь или назовите свой объект следующим образом:

Date d;
TempratureRange tr;
d = new Date();
tr = new TempratureRange;
//this can be done in Single Line also like :
// Date d = new Date();



Но в вашем коде не требуется создавать объект для вызова функций Date и TempratureRange. Поскольку оба класса содержат статическую функцию, вы не можете вызвать функцию thoes, создав объект.

Date.date(date,month,year);   // this is enough to call those static function 


Иметь четкое представление об объектных и статических функциях. Нажмите на меня

person Asis    schedule 09.10.2014

Для вызова метода одного класса во втором классе вы должны сначала создать объект этого класса, метод которого вы хотите вызвать, а затем со ссылкой на объект вы можете вызвать метод.

class A {
   public void fun(){
     //do something
   }
}

class B {
   public static void main(String args[]){
     A obj = new A();
     obj.fun();
   }
}

Но в вашем случае у вас есть статический метод в классе Date и TemperatureRange. Вы можете вызвать свой статический метод, используя имя класса непосредственно, как показано ниже, или создав объект этого класса, как указано выше, но статический метод, в основном, мы используем для создания служебных классов, поэтому лучший способ вызвать метод, используя имя класса . Как в вашем случае -

public static void main (String[] args){
  String dateVal = Date.date("01","11,"12"); // calling the date function by passing some parameter.

  String tempRangeVal = TemperatureRange.TempRange("80","20"); 
}
person Moni    schedule 09.10.2014
comment
Если они находятся в разных файлах, вам также необходимо импортировать путь к файлу. - person y_159; 08.04.2021

Вам нужно создать другие классы внутри основного класса;

Date d = new Date(params);
TemperatureRange t = new TemperatureRange(params);

Затем вы можете вызвать их методы с помощью:

object.methodname(params);
d.method();

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

public Date(params){
    set variables for date object
}

Далее вам нужен метод для ссылки.

public returnType methodName(params){
  return something;
}
person Chad    schedule 09.10.2014

Вы должны понимать разницу между классами и объектами. Из учебника по Java:

Объект — это программный пакет связанного состояния и поведения.

Класс — это проект или прототип, из которого создаются объекты.

Вы определили прототипы, но ничего с ними не сделали. Чтобы использовать объект, его нужно создать. В Java мы используем ключевое слово new.

new Date();

Вам нужно будет присвоить объект переменной того же типа, что и класс, из которого был создан объект.

Date d = new Date();

Когда у вас есть ссылка на объект, вы можете взаимодействовать с ним.

d.date("01", "12", "14");

Исключением являются статические методы, которые принадлежат классу и на которые ссылаются через него.

public class MyDate{
  public static date(){ ... }
}

...
MyDate.date();

Если вы не в курсе, в Java уже есть класс для представления дат, и вы, вероятно, не захотите создавать свой собственный.

person Romski    schedule 09.10.2014

person    schedule
comment
пожалуйста, добавьте соответствующую информацию, например, что делает ваш код. - person Anand Vidvat; 15.04.2021