Phương thức mặc định trong Java8

0
190

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ó một triển khai mặc định của phương thức forEach và lớp thực thi 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 trình biên dịch javac 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!

Khóa học Java Full stack (IJFD)

LEAVE A REPLY

Please enter your comment!
Please enter your name here