Yanıtlar:
Evet yapabilir. Ancak, dosya başına yalnızca bir genel üst düzey sınıf olabilir .java
ve genel üst düzey sınıfların kaynak dosyayla aynı ada sahip olması gerekir.
Tek bir kaynak dosyaya birden çok sınıf eklemenin amacı, ilgili destek işlevlerini (dahili veri yapıları, destek sınıfları, vb.) Ana genel sınıfla birlikte bir araya getirmektir. Bunu yapmamanın her zaman uygun olduğunu unutmayın - tek etki kodunuzun okunabilirliği (ya da okunabilirliği) üzerinedir.
java.awt.LightweightDispatcher
?
Herkese açık bir sınıf uygulamak istiyorsanız, onu o sınıfla aynı ada sahip bir dosyaya uygulamalısınız. Tek bir dosya, bir genel ve isteğe bağlı olarak bazı özel sınıfları içerebilir. Bu, sınıflar yalnızca genel sınıf tarafından dahili olarak kullanılıyorsa yararlıdır. Ayrıca genel sınıf, iç sınıfları da içerebilir.
Tek bir kaynak dosyada bir veya daha fazla özel sınıfa sahip olmak iyi olsa da, bunun yerine iç ve anonim sınıfları kullanmanın daha okunaklı olduğunu söyleyebilirim. Örneğin, bir genel sınıf içinde bir Karşılaştırıcı sınıfını tanımlamak için anonim bir sınıf kullanılabilir:
public static Comparator MyComparator = new Comparator() {
public int compare(Object obj, Object anotherObj) {
}
};
Comparator sınıfı, normalde herkese açık olması için ayrı bir dosya gerektirir. Bu şekilde, onu kullanan sınıfla paketlenir.
.Java dosyasına derleme birimi denir. Her derleme birimi, herhangi bir sayıda üst düzey sınıf ve arabirim içerebilir. Herkese açık üst düzey tür yoksa, derleme birimi herhangi bir şekilde adlandırılabilir.
//Multiple.java
//preceding package and import statements
class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...
Bir derleme biriminde yalnızca bir genel sınıf / arabirim olabilir. Cu, tam olarak bu genel üst düzey tür olarak adlandırılmalıdır.
//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces
Ana yöntemle ilgili önemli noktalar - bölüm 1
(Bölüm 2'de kapsanan sınıf sayısı ve erişim seviyelerine ilişkin noktalar)
Anonim iç sınıfların yanı sıra, başka bir kullanım, genel bir arabirim uygulayan özel iç sınıflardır ( bu makaleye bakın ). Dış sınıf, iç sınıfın tüm özel alanlarına ve yöntemlerine erişebilir.
Bu, her ikisinin de uygulamalarını açığa çıkarmadan bir model ve görünümü gibi iki sıkı bağlı sınıf oluşturmanıza olanak tanır. Başka bir örnek de bir koleksiyon ve yineleyicileridir.
Genel olarak, dosya başına bir sınıf olmalıdır. Her şeyi bu şekilde düzenlerseniz, bir sınıf aradığınızda, yalnızca o ada sahip dosyayı aramanız gerektiğini bilirsiniz.
Bunun istisnası, bir sınıfın bir veya daha fazla küçük yardımcı sınıf kullanılarak en iyi şekilde uygulandığı zamandır. Genellikle, bu sınıflar aynı dosyada bulunduğunda kodun izlenmesi en kolay yoldur. Örneğin, yöntem çağrıları arasında bazı verileri iletmek için küçük bir "tuple" sarmalayıcı sınıfına ihtiyacınız olabilir. Başka bir örnek, Runnable veya Callable'ı uygulayan 'görev' sınıflarıdır. O kadar küçük olabilirler ki, onları oluşturan ve çağıran ebeveyn sınıfıyla en iyi şekilde birleştirilirler.
Evet% 200 ,
Misal:
class A {
void methodDeclaration() { System.out.println("!!!"); }
}
class B {
public static void main(String[] args) {
new A().methodDeclaration();
}
}
Evet olabilir, ancak herhangi bir pakette yalnızca 1 genel sınıf olabilir, çünkü java derleyicisi, Genel sınıf adıyla aynı adı taşıyan .Class dosyasını oluşturur, bu nedenle, eğer bunlar 1'den fazla genel sınıfsa, seçilmesi zor olacaktır. Class dosyasının adının ne olması gerektiğini derleyici.
Değişir ... Böyle bir örnek anonim sınıflardır (olay dinleyicilerini kullanırken bunlarla çok fazla karşılaşacaksınız).
Sanırım ".java dosyası başına sadece bir STATİK OLMAYAN üst düzey genel sınıf olabilir". Değil mi?
Bir singleton uygulamak istiyorsanız, bu, programınızda uygulamanın yürütülmesi boyunca bellekte yalnızca bir örnekle çalışan bir sınıftır, o zaman bir singleton gerçekleştirmenin yollarından biri, özel bir statik sınıfı bir public sınıfın içine yerleştirmektir. . Daha sonra iç özel sınıf, yalnızca özel örneğe erişim için genel yöntemi çağrıldığında kendini başlatır.
Bu wiki makalesine göz atın,
https://en.wikipedia.org/wiki/Singleton_pattern
Konseptin çiğnenmesi biraz zaman alıyor.
Bir .java dosyasında, adı dosya ile aynı olan yalnızca bir genel üst düzey sınıf olabilir, ancak herkese aktarılabilen ve örneğin dış sınıfın alanlarına / yöntemlerine erişilebilen birkaç genel iç sınıf olabilir. : AlertDialog.Builder içinde ( 'kamu statik' ile değiştirilmiş) AlertDialog ( 'halk' tarafından değiştirilmiş)
Evet Bir .Java dosyasında birden fazla Sınıfınız olabilir. Ama bunlardan birini halka açık yaptınız. ve .java dosyasını genel sınıfın adıyla aynı adla kaydedin. .java dosyasını derlediğinizde, .java dosyasında tanımlanan her sınıf için ayrı .class dosyaları alacaksınız.
Bunun dışında bir .java dosyasında birden fazla sınıfı tanımlamak için çok fazla yöntem vardır.
Evet ! .java dosyası yalnızca bir genel sınıf içerebilir.
Bu iki sınıfın herkese açık olmasını istiyorsanız, iki .java dosyasına konmaları gerekir: A.java ve B.java.
Evet, bir .java dosyasında birden fazla sınıfınız olabilir. En fazla biri halka açık olabilir. Diğerleri pakete özeldir. Özel veya korumalı OLAMAZ. Biri genel ise, dosya o sınıfın adına sahip olmalıdır. Aksi takdirde o dosyaya adı olarak HER ŞEY verilebilir.
Bir dosya içinde çok sayıda sınıfa sahip olmak, bu sınıfların aynı pakette olduğu anlamına gelir. Bu nedenle, bu paketin içindeki ancak bu dosyada olmayan diğer sınıflar da bu sınıfları kullanabilir. Dahası, bu paket içe aktarıldığında, sınıfın içe aktarılması da bunları kullanabilir.
Daha ayrıntılı inceleme için, benim blog yazısı ziyaret edebilirsiniz burada .
Bir dosyada yalnızca bir genel sınıf üst düzey sınıf olabilir. Bu public sınıfın sınıf adı dosyanın adı olmalıdır. Pek çok kamusal iç sınıfa sahip olabilir.
Tek bir dosyada birçok sınıfınız olabilir. Bir dosyadaki çeşitli sınıf görünürlüğü seviyeleri için sınırlar aşağıdaki gibidir:
Üst düzey sınıflar:
1 genel sınıf
0 özel sınıf
herhangi bir sayıda varsayılan / korumalı sınıf
İç sınıflar:
herhangi bir görünürlüğe sahip herhangi bir sayıda iç sınıf (varsayılan, özel, korumalı, genel)
Yanlışım varsa lütfen düzelt.
Evet yapabilir. Bununla birlikte, public sınıfların kaynak dosyayla aynı ada sahip olması gerektiğinden, .java dosyası başına yalnızca bir genel sınıf olabilir.