Giriş
Interface şöyle tanımlanır
Açıklaması şöyle. Bu yüzden Cloneable, AutoCloseable güzel isimler.
Constant = public static final kabul edilir.
Metod = public abstract kabul edilir.
Java 8 Değişiklikleri
İlave olarak şunlar geldi
1. Default metod
2. Static metod
Interface şöyle tanımlanır
public interface FooInterface {
public void foo ();
}
Interface İsmiAçıklaması şöyle. Bu yüzden Cloneable, AutoCloseable güzel isimler.
Interface names should be an adjective. Sometimes, it can be noun as well like List or Map. Like classes, it should be in CamelCase, but the first letter should be capitalized.
Static Final Alan
Sadece static final alanlardan oluşan arayüz kötü bir tasarım. Effective Java kitabından bir alıntı şöyle
Java 7 DeğişiklikleriSadece static final alanlardan oluşan arayüz kötü bir tasarım. Effective Java kitabından bir alıntı şöyle
Yine kitaptan bir alıntı şöyleThe constant interface pattern is a poor use of interfaces. That a class uses some constants internally is an implementation detail. Implementing a constant interface causes this implementation detail to leak into the class’s exported API. It is of no consequence to the users of a class that the class implements a constant interface
There are several constant interfaces in the Java platform libraries...These interfaces should be regarded as anomalies and should not be emulated.
Constant = public static final kabul edilir.
Metod = public abstract kabul edilir.
Java 8 Değişiklikleri
İlave olarak şunlar geldi
1. Default metod
2. Static metod
Bu metodlar ile ilgili eleştiri şöyle.
1. Default metod
Interface - Default Method yazısına taşıdım.
2. Static metod
Açıklaması şöyle. Interface'teki static metod kalıtılmaz hatta görünmezdir. Interface içindeki static metod sadece Interface içinden kullanılır.
Java 9 Değişiklikleri
İlave olarak şunlar geldi
1. Private metod
2. Private static metod
Olabilen ŞeylerJava 8 screws this up for methods; an interface now can declare both default methods and static method implementations. This brings a large chunk of the Diamond of Death problem into the language.
Bu yeni metodlar abstract kabul edilirler. Açıklaması şöyle
Yani şöyle de yapsak aynı şeyAn interface method lacking a default modifier or a static modifier is implicitly abstract... It is permitted, but discouraged as a matter of style, to redundantly specify the abstract modifier for such a method declaration.
public interface FooInterface {
public abstract void foo ();
}
Interface - Default Method yazısına taşıdım.
2. Static metod
Açıklaması şöyle. Interface'teki static metod kalıtılmaz hatta görünmezdir. Interface içindeki static metod sadece Interface içinden kullanılır.
A class does not inherit static methods from its superinterfaces.Aynı şey kalıtan iki arayüz için de geçerli. Açıklaması şöyle.
An interface does not inherit static methods from its superinterfaces.
Örnek
Şu kod derlenmez.public interface Super {
static void test(){ }
}
public interface Sub extends Super {
}
Sub.tes(); //compile error
Java 9 Değişiklikleri
İlave olarak şunlar geldi
1. Private metod
2. Private static metod
1. Private metod
Açıklaması şöyle. Yani sadece default metodlara yardımcı olmak içindir
Private methods are not inherited by subclasses, so this feature doesn't affect implementation classes. I believe the private methods in interfaces allow us to share code between default methods.Açıklaması şöyle
Olamayan ŞeylerWith the release of Java 9, private methods are also supported in interfaces. We cannot create objects of an interface. Hence, private methods are used as helper methods that provide support to other methods in interfaces.
1. Constructor
Açıklaması şöyle
Java interfaces still cannot contain fields and constructors.2. Field yani static Olmayan Alanlar
Açıklaması şöyle
Java interfaces still cannot have non-static members
Hiç yorum yok:
Yorum Gönder