2010-03-21 16 views
7

Tamam bu yüzden, ben bu proje yapıya sahiptir:Alt paketler neden paket özel sınıfları göremiyor?

paket AB

  • sınıf SuperClass

paket ABC (bu sınıf özel paket işaretlenmiş)

  • sınıf SubClass (süper sınıftan miras alınır)

SuperClass'u herkese görünür hale getirmemeyi tercih ediyorum ... Bu özel proje için gerçekten bir yardımcı sınıftır (A.B).

Bana göre, bu A.B.C'nin A.B.'nin bir alt paketi olduğu için, SubClass SuperClass'u görebilmelidir, fakat bu durum böyle değil.

Bu sorunu çözmenin en iyi yolu ne olurdu? Ben herşeyi AB’ye AB’ye taşımak veya AB’yi AB’ye taşımak mantıklı değil. Esasen AB’deki şeylerden miras kalan bir ABD’nin olması muhtemeldir ...

Java için biraz yeni, bu yüzden iyi olun: D (Ben bir C++ ve .NET adamıyım)

cevap

9

Paketler benzersiz tanımlayıcılardır. Onları miras kurallarına uydurmalarına izin veremezsiniz. Paket ve Alt Paketler, Süper ve Alt sınıflara benzemez.

Alt pakette kullanmak istediğiniz sınıfı dış dünyaya görünür hale getirmek için herhangi bir kusur görmüyorum. Bu kriter C nasıl işleneceğini bilmek ilgi olacağını ++ /. Net (I :) bir java adam olduğum gibi)

+0

Evet Ben sadece yanlış anlamadı paketler olduğunu anladım. – Polaris878

+2

Içinde .NET Ben sadece klasörleri sınıfları koymak ve bunları iç işaretlenmiş olması gerekir :) – Polaris878

+0

@ Polaris878: Güzel. – bragboy

6

Yapabileceğiniz en iyi şey protected olarak SuperClass ait (varsayılan) yapıcısı (ler) beyan etmektir. Bu şekilde, paketden bağımsız olarak yalnızca aynı paket ve alt sınıflardaki sınıflar onu başlatabilir ve bundan uzatabilir.

-1

Bunları neden aynı paket seviyesine koymuyorsunuz?

Bir şekilde miras yerine kompozisyon kullanabilir misiniz? Etkili Java'yı okuduktan sonra bunu daha çok yapmaya çalışıyorum. Gereksinimlerinize göre bu mümkün olup olmadığından emin değil, ama dikkate değer olabilir.

İyi şanslar.

+1

Onları aynı paket seviyesinde istemiyorum çünkü süper sınıfa dayanacak yaklaşık 20-30 sınıfım olacak ve ben şeyleri düzenli bir şekilde organize etmeye çalışıyorum. – Polaris878

İlgili konular