Java 8 - Phương thức mặc định
Java 8 giới thiệu một khái niệm mới về việc triển khai phương thức mặc định trong các giao diện. Khả năng này được thêm vào để tương thích ngược để các giao diện cũ có thể được sử dụng để tận dụng khả năng biểu thức lambda của Java 8.
Ví dụ: giao diện 'Danh sách' hoặc 'Bộ sưu tập' không có khai báo phương thức 'forEach'. Do đó, việc thêm phương thức như vậy sẽ đơn giản phá vỡ các triển khai khung thu thập. Java 8 giới thiệu phương thức mặc định để giao diện List / Collection có thể có triển khai mặc định của phương thức forEach và lớp triển khai các giao diện này không cần triển khai giống nhau.
Cú pháp
public interface vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
}
Nhiều mặc định
Với các chức năng mặc định trong giao diện, có khả năng một lớp đang triển khai hai giao diện với các phương thức mặc định giống nhau. Đoạn mã sau giải thích cách giải quyết sự không rõ ràng này.
public interface vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
}
public interface fourWheeler {
default void print() {
System.out.println("I am a four wheeler!");
}
}
Giải pháp đầu tiên là tạo một phương thức riêng ghi đè triển khai mặc định.
public class car implements vehicle, fourWheeler {
public void print() {
System.out.println("I am a four wheeler car vehicle!");
}
}
Giải pháp thứ hai là gọi phương thức mặc định của giao diện được chỉ định bằng cách sử dụng super.
public class car implements vehicle, fourWheeler {
public void print() {
vehicle.super.print();
}
}
Phương thức mặc định tĩnh
Một giao diện cũng có thể có các phương thức trợ giúp tĩnh từ Java 8 trở đi.
public interface vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
static void blowHorn() {
System.out.println("Blowing horn!!!");
}
}
Ví dụ về phương pháp mặc định
Tạo chương trình Java sau bằng cách sử dụng bất kỳ trình soạn thảo nào bạn chọn trong C: \> JAVA.
Java8Tester.java
public class Java8Tester {
public static void main(String args[]) {
Vehicle vehicle = new Car();
vehicle.print();
}
}
interface Vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
static void blowHorn() {
System.out.println("Blowing horn!!!");
}
}
interface FourWheeler {
default void print() {
System.out.println("I am a four wheeler!");
}
}
class Car implements Vehicle, FourWheeler {
public void print() {
Vehicle.super.print();
FourWheeler.super.print();
Vehicle.blowHorn();
System.out.println("I am a car!");
}
}
Xác minh kết quả
Biên dịch lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\JAVA>javac Java8Tester.java
Bây giờ chạy Java8Tester như sau:
C:\JAVA>java Java8Tester
Nó sẽ tạo ra kết quả sau:
I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!