'u geçersiz kılar Neden Devremülk'te bir üst sınıfın örnek değişkenleri mi? Kalıtımın davranışı değiştirmesi amaçlandığından,Java Kalıtım - örnek değişkenler
cevap
Davranış, yöntemlerle ortaya çıkar ve bu yüzden geçersiz kılınabilirler.
Alanlar davranış değil, durumdur. Bunu değiştirmek zorunda değilsiniz, ayrıca süper sınıfın kullandığı özel yöntemler. Üst sınıfın işi yapmasına izin vermesi amaçlanmıştır.
alanını bir alana gizleyebilirsiniz, ancak geçersiz kılma it.
Gizleme, bir alanın hangi sınıfa eriştiğine bağlı olarak farklı bir değere sahip olacağı anlamına gelir. Alt sınıftaki alan, süper sınıftaki alanı "gizler", ancak her ikisi de var.
alanını gizlemek için son derece kötü bir uygulama, ama işleri: yöntem A
veya B
yılında, saha overriden edildi bağlı olarak
public class HideField {
public static class A
{
String name = "a";
public void doIt1() { System.out.println(name); };
public void doIt2() { System.out.println(name); };
}
public static class B extends A
{
String name = "b";
public void doIt2() { System.out.println(name); };
}
public static void main(String[] args)
{
A a = new A();
B b = new B();
a.doIt1(); // print a
b.doIt1(); // print a
a.doIt2(); // print a
b.doIt2(); // print b <-- B.name hides A.name
}
}
erişilir.
Bunu asla yapmayın! Bu sizin probleminizin çözümü değildir ve miras ile ilgili çok ince hatalar yaratır.
Çünkü:
O
parent class
kodu kırabilir. Örneğin kod aşağıdakileri dikkate (Aşağıdaki kodda hattınınobB.getInt();
davranışı ne olurdu basan örnek değişkenler izin verilir ise):class A { int aInt; public int getInt() { return aInt; } } class B extends A { int aInt; public int getInt2() { return aInt; } public static void main(String[] args) { B obB = new B(); //What would be behavior in following line if, //instance variables overriding is allowed obB.getInt(); } }
O mantıksal
child class
çünkü tüm davranışlar/var yansıtmalıdır değilparent class
'un.
Yani, child class
içinde kalıtsal yöntemler/değişkenleri gizleme sadece ama override
yapamam olabilir.
ardından Java doc from Oracle bir özü neyi işlem, child class
beklemek/gerçekleştirebilir belirterek geçerli:
Sen olarak, bunları gizlemek, bunların yerine, ya da yeni üyelerle bunları tamamlayacak kalıtsal üyeleri kullanabilirsiniz :
- Devralınan alanlar, diğer tüm alanlar gibi doğrudan kullanılabilir.
- Alt sınıfta, süper sınıftakiyle aynı ada sahip bir alanı bildirebilir ve gizleyebilirsiniz (önerilmez).
- 1. iOS 5 Örnek değişkenler
- 2. Java: Jenerik Kalıtım
- 3. Rails Modelinde Örnek Değişkenler Model
- 4. Java Arayüz Kalıtım ve Genişletme
- 5. (U) Ruby Extensions: rb_gc_mark() ve örnek değişkenler
- 6. Örnek değişkenler için contextmanagers nasıl kullanılır?
- 7. Örnek değişkenler için textarea ile java'da Gui
- 8. Kalıtım, "ebeveyn"
- 9. Java-Bir örnek değişkeni nedir?
- 10. Akka Java FSM by Örnek
- 11. Değişkenler her zaman Java arayüzünde belirtilmelidir?
- 12. Enum içinde Kalıtım
- 13. Örnek değişkenler vs parametre geçişi? Bir tartışma var mı?
- 14. Amaç-C: hata ayıklayıcısında kapsam dışı örnek değişkenler
- 15. Örnek değişkenler varsayılan olarak Objective-C'de sıfır olarak ayarlandı mı?
- 16. Python'da örnek değişkenler? Bir atama hatası alamaya devam edin
- 17. Prototipsiz prototip kalıtım mı?
- 18. Çoklu Kalıtım Seviyesi
- 19. Örnek?
- 20. Sınıf özniteliklerinde kalıtım (python)
- 21. C# Serile/Kalıtım
- 22. Değişkenler
- 23. Yakut Kalıtım
- 24. Yöntem kalıtım
- 25. Kalıtım 'CGPoint'
- 26. C# kalıtım
- 27. Yapıcılar kalıtım
- 28. EditorTemplate kalıtım -
- 29. Java Örnek: Quartz ile Dinamik İş Çizelgeleme
- 30. Gönderen sınıfı - GCM Örnek - Java Uygulama motoru
Bu işlemi yapmamanın zorunlu önerisi için birden çok yükseltmedir. Bir yılana dönüşen şeytani bir lütuf gibi bir şey .... Bu asla yardımcı olmaz. –
Özellikle neden süper veya alt sınıf adını kullanarak eriştiğiniz statik sınıf alanları ile yapmak isteyebileceğiniz ince nedenler vardır. "Asla" asla söylemek için iyi bir şey değildir;) – RichieHH
Statik kullanmak tamamen başka bir şeydir, Oracle @ewernli ile aynı öneriye sahiptir: http://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html – MengT