Java documentation numaralı belgede oldukça iyi tanımlanmış var.
İlk sorunuzun cevabı oldukça basit. -implicit
seçeneği kullanmamak neredeyse (seçeneğin varsayılan değer olan) -implicit:class
kullanmak gibidir, ancak açıkça seçeneğini kullanarak belirli uyarıyı bastırmak: derleyici bir tür bilgi ihtiyacını keşfedemeyeceğimiz
ek açıklama işlemi tamamlanana kadar. Bir kaynak dosyada tür bilgisi bulunduğunda ve -implicit
seçeneği belirtilmemişse, derleyici, dosyanın ek açıklama işlemine tabi tutularak olmadan derlendiğine dair bir uyarı verir. Uyarıyı devre dışı bırakmak için, komut satırındaki dosyayı belirtin (böylece ek açıklama işlemine tabi olacak) veya veya sınıf dosyaları bu kaynak dosyaları için oluşturulup oluşturulmayacağını belirtmek için -implicit
seçeneğini kullanın.
Şimdi ikinci sorunuz. dokümantasyon belirttiği gibi:
bir kaynak dosyasını derlemek için derleyici genellikle türü hakkında bilgi ihtiyacı var, ama türü tanımı komut satırı üzerinde belirtilen kaynak dosyalarında değil. Derleyici, her bir sınıf için veya kaynak dosyada kullanılan, uzatılan veya uygulanan arabirime ilişkin bilgi gerektirir. Bu , kaynağında açıkça belirtilmeyen sınıfları ve arabirimleri içerir, ancak bu, kalıtım yoluyla bilgi sağlar.
Örneğin
, bir alt sınıf java.applet.Applet oluştururken, aynı zamanda Applet atası sınıflarını kullanarak şunlardır: java.awt.Panel
, java.awt.Container
, java.awt.Component
ve java.lang.Object
. Main, ImplicitClass, BaseImplicitClass:
üç dosyalarında üç sınıf atalım.
Main.java:
public class Main {
public static void main(String[] args) {
ImplicitClass ec = new ImplicitClass();
System.out.println(ec.getClass());
}
}
ImplicitClass.java:
public class ImplicitClass extends BaseImplicitClass {
}
BaseImplicitClass.java:
public class BaseImplicitClass {
}
böyle komut satırından onları derlemek:
javac -cp . -implicit:class Main.java
veya
javac -cp . Main.java
her üç * .class dosyaları oluşturulur.
bunu
javac -cp . -implicit:none Main.java
sadece Main.class oluşturulur derlerken.
Eğer
javac -cp . -implicit:none Main.java ImplicitClass.java
iki * .class dosyaları bu sınıf olarak BaseImplicitClass.class
Main.class
ve ImplicitClass.class
(açıkça derleyiciye geçti çünkü ImplicitClass
şimdi açık hale gelmiştir), oluşturulur, ancak değildir derlemek zaman gereklidir, ancak örtülüdür.