Interface không có thân hàm khi so sánh với Abstract class có còn đúng? - Xưa rồi diễm ơi!

"Xưa rồi diễm ơi!" đấy là câu nói của thầy mình khi nói về những lý thuyết trước đây cho rằng việc so sánh (một phần) giữa Interface và Abstract class.

  • Interface không thể viết được body trong hàm.

  • Abstract thì viết được.

Lý thuyết đó đã không còn đúng với Java 8.

Lý thuyết cụ thể cho nó mình sẽ đề cập trong một vài buổi sắp tới, hôm nay mình sẽ chỉ nếu ra vấn đề này và đưa ra một ví dụ nhỏ để chúng ta cùng thảo luận. Chốt một lý thuyết chuẩn nhất. Tránh nhầm lẫn về sau!

Mình khai báo một Interface là Person có phương thức là walk(), trong phương thức đó mình sẽ viết thêm body vào hàm.

/**
 * @author khiemnd5
 *Email:[email protected]
 *
 * Apr 19, 2016
 */
package com.khiemnd5.java8;

interface Person {
	default public void walk(){
		System.out.println("Tôi đang đi ở trên Hà Nội");//trước java 8 thì không thể viết vào thân hàm
	}
}

Tạo một PersonAImpl implements từ Person.

/**
 * @author khiemnd5
 *Email:[email protected]
 *
 * Apr 19, 2016
 */
package com.khiemnd5.java8;

public class PeronAImpl implements Person {
	public static void main(String[] args) {
		PeronAImpl person = new PeronAImpl();
		person.walk();
	}
}

Kết quả:

Screen Shot 2016-04-19 at 10.52.26 AM.png

Nào, cùng thảo luận 😉

References: https://dzone.com/articles/interface-default-methods-java


All Rights Reserved