Giriş
Java bir sınıf içinde başka bir sınıf tanımlamaya izin verir. Bu iç sınıf 3 farkı şey olabilir.
Java bir sınıf içinde başka bir sınıf tanımlamaya izin verir. Bu iç sınıf 3 farkı şey olabilir.
1. Static Nested Sınıf
2. Non-Statıc Nested Sınıf
Not : Bu yazıda Nested veya Inner kelimeleri aynı şeyi ifade ediyor.
Nested Sınıf vs Anonymous Sınıf
Inner/Nested Sınıf ile Anonymous Sınıf kavramsal olarak farklı şeylerdir.
Nested Sınıf Nedir?
Açıklaması şöyle. Nested ve Inner sınıflar kendilerini sarmalayan sınıflara erişebilir.
Açıklaması şöyle.
1. static Nested Class
Açıklaması şöyle.
Nested class'ın private metodları dış sınıf tarafından kullanılabilir. Şöyle yaparız.
Nested class dış sınıfın private metodunu kullanabilir. Şöyle yaparız.
Tabiki nested class'ın metodu static ise dış sınıfın metodu da static olmalı. Şu kod derlenmez.
Static Olmayan Inner/Nested Class yazısına taşıdım
Açıklaması şöyle. Nested ve Inner sınıflar kendilerini sarmalayan sınıflara erişebilir.
importTerminology: Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are called static nested classes. Non-static nested classes are called inner classes.
Açıklaması şöyle.
Yani import java.lang.Math.* yaparsak Math sınıfı içindeki inner sınıfları import ederiz ancak Math sınıfını dahil etmeyiz.Note: Another, less common form of import allows you to import the public nested classes of an enclosing class. For example, if the graphics.Rectangle class contained useful nested classes, such as Rectangle.DoubleWide and Rectangle.Square, you could import Rectangle and its nested classes by using the following two statements.import graphics.Rectangle;import graphics.Rectangle.*;Be aware that the second import statement will not import Rectangle.
1. static Nested Class
Açıklaması şöyle.
ÖrnekA static member class is the simplest kind of nested class. It is best thought of as an ordinary class that happens to be declared inside another class and has access to all of the enclosing class’s members, even those declared private.
Nested class'ın private metodları dış sınıf tarafından kullanılabilir. Şöyle yaparız.
public class Foo{
public static class Inner {
private void doIt() {
System.out.println("doIt()");
}
}
public static void main(String[] args) {
Foo.Inner i = new Inner();
i.doIt();
}
}
ÖrnekNested class dış sınıfın private metodunu kullanabilir. Şöyle yaparız.
public class OuterClass {
private void printMessage(String message) {
System.out.println(message);
}
private static class InnerClass {
private void sayHello(OuterClass outer) {
outer.printMessage("Hello world!"); // allowed
}
}
}
ÖrnekTabiki nested class'ın metodu static ise dış sınıfın metodu da static olmalı. Şu kod derlenmez.
public class OuterClass {
public void printMessage(String message) {
System.out.println(message);
}
private static class InnerClass {
public void sayHello() {
printMessage("Hello world!"); //error: Cannot make a static reference to the
//non-static method printMessage(String)
}
}
}
2. non-static Inner ClassStatic Olmayan Inner/Nested Class yazısına taşıdım
3. Local Class
Local Class ile Inner/Nested Class farklı şeyler. Local class metod içine tanımlanır.
Örnek
Şöyle yaparız
public class X {
void m() {
class Z {}
...
}
Hiç yorum yok:
Yorum Gönder