2014-10-09 6 views
2

저는 세 가지 클래스를 가진 자바 프로젝트를 작성하고 있습니다. 이것은 내가 지금까지 가지고있는 것이다. 나는 다른 클래스에서 다른 클래스로 메서드 함수를 어떻게 호출 할까? 이미 2 개의 클래스를 작성했습니다. 나는 "Date"클래스와 "TemperatureRange"클래스를 완성했다. 지금 나는이 두 클래스를 "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; 

    } 
} 

답변

10

다른 클래스에게 있습니다. 이제 우리는 두 개의 클래스, 있다고 가정 해 봅시다와 B B는 같을 것이다 A. 클래스 A에서 호출 할 방법이 있습니다 같이 것이다 해봐요() 메소드를 포함

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

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

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

B를 :

public class B 
{ 
    public void doSomething() 
    { 
     System.out.println("Look, I'm doing something in class B!"); 
    } 
} 
+0

그 메모에, 나는 그가 Date와 TemperatureRange의 인스턴스를 생성하기 때문에 그가 정적 메서드를 사용해야한다고 생각하지 않습니다. 정적 메소드는 인스턴스가 아니라 클래스에 속할 것임을 의미합니다. – tenkii

+0

나는 그가 자신의 메인 메서드 내에서 비 ​​정적 메서드를 호출하려고 시도하는 몇 가지 문제에 부딪쳤다 고 생각합니다. 내 예제가 너무 일반적이고 자신의 코드에 맞게 특별히 사용자 지정해야하는지 궁금하지만, 항상 스푼 공급에주의해야합니다. – MarsAtomic

+0

종속성 주입이라고하는 디자인 패턴입니까? 아니면 완전히 무관 한 것입니까? –

0

주 클래스의 다른 클래스를 인스턴스화해야합니다.

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; 
} 
0

클래스와 개체의 차이점을 이해해야합니다. 자바 튜토리얼에서 :

객체는 클래스 당신은 프로토 타입을 정의했다

객체가 생성되는 청사진 또는 프로토 타입이

관련 상태와 행동의 소프트웨어 번들입니다 그러나 그들과 아무 것도하지 않았습니다. 개체를 사용하려면 개체를 만들어야합니다. Java에서는 new 키워드를 사용합니다.

new Date();

당신은 개체에서 생성 된 클래스와 같은 유형의 객체를 변수에 할당해야합니다.당신이 개체에 대한 참조를 일단

Date d = new Date();

당신이 그것을

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

는 예외와 상호 작용할 수는 클래스에 속하고 그

를 통해 참조하는 정적 메서드입니다

공용 클래스 MyDate { public static date() {...}

... MyDate.date();

자바가 이미 날짜를 나타내는 클래스를 가지고 있다는 것을 알고 있지 않은 경우, 자신 만의 클래스를 만들지는 않을 것입니다. 클래스 WeatherRecord에서

1

이 : 서로 다른 패키지에있는 경우

먼저 가져 오기 클래스가 다른이 사항이없는 그런




Import <path>.ClassName 
을 필요로한다, 단지 referene 또는 전화 개체와 같은 :

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 




은 객체와 정적 기능에 대한 명확한 개념을 가지고. Click me

0

두 번째 클래스에서 한 클래스의 메서드를 호출하려면 메서드를 호출 할 수있는 개체 참조보다 호출 할 메서드의 클래스 개체를 먼저 만들어야합니다.

Class A { 

Public void fun(){ 

//do something 

} 

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

하지만 귀하의 경우에는 Date 및 TemperatureRange 클래스에 정적 메서드가 있습니다. 아래의 코드처럼 직접 클래스 이름을 사용하거나 위의 코드와 같은 클래스의 객체를 만들어 static 메소드를 호출 할 수 있습니다. 주로 유틸리티 클래스를 만드는 데 사용하므로 클래스 이름을 사용하여 메소드를 호출하는 가장 좋은 방법입니다. . 당신의 경우처럼 -

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"); 
} 
관련 문제