1. İç sınıflar
Son zamanlarda statik değişkenler ve statik yöntemler olduğunu öğrendiniz. Statik sınıfların da olduğu ortaya çıktı. Ama biz bu konuya uzaktan yaklaşacağız.
Java'da, sınıflar içinde sınıflar bildirmenize tamamen izin verilir. Ve hatta sınıflar içinde sınıflar içinde olan sınıflar içinde sınıflar. Her şey çok basit görünüyor:
class OuterClass
{
variables of the class
methods of the class
class NestedClass
{
variables of the class
methods of the class
}
}
Sadece bir sınıfı diğerinin içinde ilan ediyoruz. Kadar basit.
Örnek:
public class Solution
{
static ArrayList<Point> points = new ArrayList<Point>();
public static void main(String[] args)
{
Point point = new Point();
point.x = 100;
point.y = 200;
points.add(point);
}
static class Point
{
int x;
int y;
}
}
Yuvalanmış sınıflar statik olabilir veya statik olmayabilir. Statik iç içe sınıflara basitçe statik iç içe sınıflar denir . Statik olmayan yuvalanmış sınıflara iç sınıflar ( iç sınıflar ) denir .
2. Statik sınıflar
Statik iç içe sınıflar, dış sınıflarının dışında kullanılabilir. Böyle bir sınıf, genel erişim değiştiricisine sahipse, programın herhangi bir yerinde kullanılabilir. Bu tür sınıflar, herhangi bir sıradan sınıftan neredeyse ayırt edilemez. Ama bir iki fark var.
Sınıf adı
Statik iç içe geçmiş bir sınıfa, dış sınıfı dışında bir yerden başvurmak istiyorsanız, dış sınıfın adı ve iç içe sınıfın adından oluşan sınıf adını belirtmeniz gerekir. İşte bu ismin genel görünümü:
OuterClass.InnerClass
Örnekler:
Dış sınıf | İç içe sınıf | Yuvalanmış sınıfın tam adı |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
İç içe geçmiş bir sınıfın kendi iç içe sınıfı varsa, adları basitçe bir nokta kullanılarak birleştirilir.
JDK'daki iç içe sınıfların tipik bir örneği, sınıfın Entry
içindeki sınıftır Map
. Bir nesnede depolanan anahtar/değer çiftleri kümesini almak istiyorsanız , a döndüren yöntemi HashMap
kullanın .entrySet()
Set<Map.Entry>
Bunun bir dış sınıf ve iç içe geçmiş bir sınıf örneği olduğuna dikkat edin.Map.Entry
nesne oluşturma
Statik iç içe bir sınıfın nesnesini oluşturmak çok kolaydır. İşte böyle görünüyor:
OuterClass.NestedClass name = new OuterClass.NestedClass();
Her şey normal sınıflarla aynıdır, ancak ad iki bölümden oluşur.
Statik yöntemleri çağırma
Bir statik sınıfın statik yöntemleri varsa, bunlara sıradan sınıfların statik yöntemleriyle aynı şekilde erişebilirsiniz (ancak sınıf adı iki bölümden oluşacaktır).
OuterClass.NestedClass.staticMethod();
Statik değişkenlere erişme
Yuvalanmış bir sınıfın genel statik değişkenlerine erişmek de kolaydır:
OuterParent.NestedClass.nameOfStaticVariable
3. Statik sınıfların özellikleri
Statik iç içe geçmiş sınıflar, statik olarak adlandırılmak için en az nedene sahiptir. Normal sınıflar gibi davranırlar . Statik olmayan yöntemlerden bunlara erişimde herhangi bir kısıtlama yoktur.
Dış sınıfı içinde statik iç içe geçmiş bir sınıfla çalışıyorsanız, en sıradan (iç içe ve statik olmayan) sınıftan herhangi bir fark görmezsiniz.
Örnek:
Statik iç içe Point sınıfı | Sıradan Puan sınıfı. |
---|---|
|
|
Bazı statik iç içe sınıfları alıp dış sınıfın dışına taşırsanız, değişecek olan tek şey, yeni sınıfın artık eski dış sınıfının değişkenlerine ve yöntemlerine erişemeyeceğidir .private static
Örnek:
Statik iç içe Point sınıfı | Sıradan Puan sınıfı. |
---|---|
|
|
main
Sıradan sınıftaki Point
yöntem , sınıfın değişkenine erişemez !private static
points
Solution
Statik iç içe geçmiş bir sınıf ile sıradan bir sınıf arasındaki temel fark budur. Statik iç içe sınıfın yöntemleri, dış sınıflarının tüm statik değişkenlerine ve yöntemlerine, bildirilmiş olsalar bile erişebilir private
.
Ve eğer düşünürseniz, bu neden şaşırtıcı olsun ki? Değiştirici private
, bu değiştirici tarafından işaretlenen değişkenlere ve yöntemlere yalnızca kendi sınıflarından erişilebileceğini açıkça söyler. Statik iç içe geçmiş bir sınıf, dış sınıfının içinde mi? Evet, sorun değil! Onlara istediğiniz kadar erişin.
GO TO FULL VERSION