2013-08-20 10 views
13

Oto moja praca domowa pytanie:Java Homework Help (Dostęp do statycznego elementu poprzez Instancji Reference)


Napisz deklarację klasy dla klasy „Zegar”. Powinien zawierać zmienne instancji dla godzin, minut i sekund (wszystkie liczby całkowite). Powinien również posiadać metodę toString(), aby pokazać czas w formacie pokazanym poniżej. Napisz oddzielną klasę "ClockDriver", aby a) utworzyć instancję zegara, b) ustawić godziny, minuty i sekundy zegara oraz c) pokazać czas zegara za pomocą metody getTime(). Użyj przykładu klasy Dog na stronie 36 jako przewodnika. Sample z przedstawiono poniżej:

jest godzina 03:45:00

// nie martw się, jeśli nie można dostać zarówno zer w

// drugim polu. To jest kwestia formatowania

// zajmiemy się później


Oto moja klasa Zegar:

class Clock { 

int hours; 
int minutes; 
int seconds; 


public String toString() { 

    String temp = (""); 
    return temp.format("%02d:%02d:%02d", hours, minutes, seconds); 

} //end method toString 

public void getTime() { 

    System.out.print("The time is " + toString()); 

} //end method getTime 

} //end class Clock 

A oto moja klasa ClockDriver:

public class ClockDriver { 

    public static void main (String[] args) { 

     Clock c = new Clock(); 
     c.hours = 4; 
     c.minutes = 30; 
     c.seconds = 00; 
     c.getTime(); 

    } //end main 

} //end class ClockDriver 

Mimo że kompiluje się dobrze i działa ładnie, dostaję to, co moim zdaniem jest ostrzeżeniem od IDE, mówiąc, że mój

return temp.format("%02d:%02d:%02d", hours, minutes, seconds); 

linia uzyskuje dostęp do statycznego elementu poprzez odwołanie do instancji. W szczególności bit o pewnej liczbie bitów.

Więc moje pytania to:

1.) Dlaczego dostępu statycznego elementu poprzez odniesienie instancji nie muszą zachęcać?

2.) Czy istnieje lepszy sposób, aby połączyć to tak, że nie mam dostępu do statycznego członka poprzez odwołanie do instancji?

Z góry dziękuję!

+7

+1 wyłącznie dla nazwy użytkownika. –

Odpowiedz

30

Metody statyczne należą do samej klasy, a nie do dowolnej instancji. Chociaż możesz wywołać metodę static z instancji klasy, nie musisz używać instancji klasy, a nie powinieneś. Może to być mylące, ponieważ wygląda na to, że metoda nie jest static, mimo że jest to static.

Najlepszy i najczystszy sposób, aby wywołać metodę static jest użycie nazwy samej klasy, a nie instancją klasy, aby wywołać metodę:

return String.format("%02d:%02d:%02d", hours, minutes, seconds); 

I nie trzeba instancję temp w ogóle.

+0

OK, dziękuję! Miałem problemy i mój nauczyciel wyrzucił mój fragment, który używał tymczasowego. Sądzę, że nie spodziewał się, że dowiem się, jak dobrać właściwe formatowanie, dlatego nie wyszło. –

0

W rzeczywistości nie należy używać ciągu temp. Nazwij to jako String.format. Aby odpowiedzieć na twoje pytanie, jest to mylące, ponieważ połączenie nie wygląda na temp.

1

Należy pamiętać, że jeśli instancją pewnej klasy, pozwala nazwać C posiada funkcję, void foo() i użyć instancji c zadzwonić foo tak:

c.foo();

co faktycznie nazywany jest:

foo(c);

podczas wywoływania funkcji static void foo2():

Class.foo2();

jest nazywany tak, jak wygląda.

Wywołanie funkcji statycznej za pomocą instancji wskazuje użytkownika, który prawdopodobnie nie jest pewien, co robi.

Powiązane problemy