2013-12-16 45 views
6

Çocuklar, basit ama soru sorma bir sorum var. Anladığım kadarıyla, static temel olarak, bu sınıfın her bir örneği için bu yöntemin aynı olacağını, eğer değiştirirsek, bu sınıfın her bir örneği için değişeceğini, aynı zamanda Sınıf Yöntemi olarak da bilinir. Ben toString() yöntem belli biçim cadı uygulayan bir sınıf var buysa, diyelim ki:Neden toString() statik bir yöntem olamaz?

public String toString() { 
    return "(" + x + "," + y + ")"; 
} 
o kadar statik ayarlanamaz Neden

? Bu format, o sınıfın her örneği için aynı olacağından ...?

+6

x ve y hakkında düşünün. Statik olmayan alanlar ise, statik bir yöntem erişemez. –

+0

@PatriciaShanahan, x ve y statik değerler olsaydı, toString() yönteminin statik olarak ayarlanabileceğini söylüyorsunuz? –

+0

'Statik 'anlayışınız biraz kapalı. "statik", sadece bir örneğin yaratıldığı anlamına gelir (en azından değişkenler için). Bir nesneyi (örn. 'ClassName.toString()') bile 'statik' değişkenlerine/yöntemlerine erişebilirsiniz.Ayrıca, her nesne için yeni bir yöntem yapmak zorunda değilsiniz, hepsi aynı yöntemin kullanılabilir – Justin

cevap

8

Bu geçerli değildir sadece toString()

Java Language Specification Bu bir derleme zamanı hatası

diyorsa statik yöntem hides bir örnek yöntemi. Örnek yöntemi toString() dolaylı bir alt türü static gibi bir yöntem toString() ilan Object devralınır yana

bir derleme hataya neden olur.

Nesne Yönelimli bakış açısından, bu soruya verilen diğer yanıtlara veya related sorularına bakın.

+0

bu durumda, 'equals() ',' hashCode() ', vb. – Justin

+0

@Quincunx Evet, görünür örnek yöntemi için geçerlidir. –

4

Statik bir yöntem örnek alanlarına erişemediğinden. Ayrıca, toString(), java.lang.Object tarafından belirtildi, bu nedenle, toString()'u çağırmak için bir Nesne örneğiniz olmalıdır. Son olarak, toString() statik ise, Object örneklerini kabul etmeliyiz (bir sınıfın n bir örneğinde toString() yöntemini nasıl arayabilirdiniz?).

İlgili konular