- Bài 1: Tổng quan ngôn ngữ Java
- Bài 2: Hướng dẫn cài đặt và cấu hình Java
- Bài 3: Hướng dẫn cài đặt và cấu hình Intellij IDEA trên Window
- Bài 4: Tạo Project và làm quen với Intelij IDEA
- Bài 5: Cú pháp và quy tắc cơ bản trong Java
- Bài 6: Các kiểu dữ liệu trong Java
- Bài 7: Các kiểu biến trong Java
- Bài 8: Toán tử trong Java
- Bài 9: Hệ thống Unicode trong Java
- Bài 10: Các kiểu vòng lặp
- Bài 11: Câu lệnh điều khiển rẽ nhánh
- Bài 12: Câu lệnh Break, Continue trong Java
- Bài 13: Lớp và đối tượng
- Bài 14: Tính chất của lập trình hướng đối tượng trong Java
- Bài 15: Abstract class và Interface trong Java
- Bài 16: Từ khóa super và this trong Java
- Bài 17: Từ khóa static và final trong Java
- Bài 18: Mảng (Array) trong Java
- Bài 19: Package trong Java
- Bài 21: String trong Java
- Bài 22: StringBuffer và StringBuilder
- Bài 23: Tổng quan về File và I/O
- Bài 24: Xử lý nhập xuất bằng Byte Stream và Character Stream
- Bài 25: Thao tác với tệp và thư mục trong Java
- Bài 26: Tổng quan về Collection trong Java
- Bài 27: Những Interface phổ biến trong Java Collection Framework
- Bài 28: Những Class được triển khai dựa trên Interface của Java Collection
- Bài 29: Khái niệm xử lý ngoại lệ trong Java
- Bài 30: Hướng dẫn xử lý ngoại lệ trong Java
- Bài 31: Đa luồng trong Java
- Bài 32: Thread synchronization trong Java
- Bài 33: Tổng quan về Java AWT
- Bài 34: Container trong Java AWT
- Bài 35: Component trong Java AWT
- Bài 36: Layout Manager trong Java AWT
- Bài 37: Xử lý sự kiện trong Java AWT
- Bài 38: Tổng quan về Java Swing
- Bài 39: Container trong Java Swing
- Bài 40: Component trong Java Swing
- Bài 41: Layout trong Java Swing
- Bài 42: Event trong Java Swing
- Bài 43: Menu trong Java Swing
- Bài 44: Kết nối cơ sở dữ liệu với thư viện JDBC trong Java
Bài 15: Abstract class và Interface trong Java - Lập trình Java cơ bản
Đăng bởi: Admin | Lượt xem: 5461 | Chuyên mục: Java
1. Abstract class
Một lớp được khai báo với từ khóa abstract là lớp abstract trong Java. Lớp abstract có nghĩa là lớp trừu tượng, nó có thể có các phương thức abstract hoặc non-abtract.
Lớp trừu tượng có thể không khai báo hoặc khai báo nhiều method trừu tượng bên trong.
Một lớp kế thừa từ lớp trừu tượng (subclass – lớp con) không cần phải implement non-abstract methods, nhưng những method nào có abstract thì bắt buộc phải override. Trừ khi subclass cũng là abstract.
Cú pháp:
<access modifier> abstract class <class name> {
}
Phương thức trừu tượng:
- Một phương thức được khai báo là abstract và không có trình triển khai thì đó là phương thức trừu tượng (abstract method).
- Nếu bạn muốn một lớp chứa một phương thức cụ thể nhưng bạn muốn triển khai thực sự phương thức đó để được quyết định bởi các lớp con, thì bạn có thể khai báo phương thức đó trong lớp cha ở dạng abstract.
- Từ khóa abstract được sử dụng để khai báo một phương thức dạng abstract. Phương thức abstract sẽ không có định nghĩa, được theo sau bởi dấu chấm phẩy, không có dấu ngoặc nhọn theo sau.
Cú pháp
<access modifier> abstract void <method name>();
Ví dụ: Viết chương trình tạo ra các phương tiện giao thông sao cho cách tạo ra là giống nhau. Phương tiện đó có thể là ô tô, xe máy, xe đạp,...
Lớp Vehicle:
package com.company;
public abstract class Vehicle {
public Vehicle() {
}
public abstract void create();
}
Lớp Bike:
package com.company;
public class Bike extends Vehicle {
@Override
public void create() {
System.out.println("Create Bike...");
}
}
Lớp Moto:
package com.company;
public class Moto extends Vehicle {
@Override
public void create() {
System.out.println("Create Moto...");
}
}
Lớp Main:
package com.company;
public class Main {
public static void main(String args[]) {
Vehicle moto = new Moto();
moto.create();
Vehicle bike = new Bike();
bike.create();
}
}
Kết quả trả về khi chạy chương trình:
Create Moto...
Create Bike...
2. Interface
Interface có những đặc điểm sau:
- Interface luôn luôn có modifier là: public interface, cho dù bạn có khai báo rõ hay không.
- Nếu có các trường (field) thì chúng đều là: public static final, cho dù bạn có khai báo rõ hay không.
- Các method của nó đều là method trừu tượng, nghĩa là không có thân hàm, và đều có modifier là: public abstract, cho dù bạn có khai báo hay không.
- Interface không có Constructor
Một interface tương tự với một class bởi những điểm sau đây:
- Một interface được viết trong một file với định dạng .java, với tên của interface giống tên của file.
- Bytecode của interface được lưu trong file có định dạng .class.
- Khai báo interface trong một package, những file bytecode tương ứng cũng có cấu trúc thư mục có cùng tên package.
Một interface khác với một class ở một số điểm sau đây:
- Bạn không thể khởi tạo một interface.
- Một interface không chứa bất cứ hàm Contructor nào.
- Tất cả các phương thức của interface đều là abstract.
- Một interface không thể chứa một trường nào trừ các trường vừa static và final.
- Một interface không thể kế thừa từ lớp, nó được triển khai bởi một lớp.
- Một interface có thể kế thừa từ nhiều interface khác.
Ví dụ: Vẫn yêu cầu như phần Abstract class, nhưng chúng ta sẽ sử dụng interface.
Interface vehicle:
package com.company;
public interface Vehicle {
public void create();
}
Lớp Bike:
package com.company;
public class Bike implements Vehicle {
@Override
public void create() {
System.out.println("Create Bike...");
}
}
Lớp Moto:
package com.company;
public class Moto implements Vehicle {
@Override
public void create() {
System.out.println("Create Moto...");
}
}
Lớp Main:
package com.company;
public class Main {
public static void main(String args[]) {
Vehicle moto = new Moto();
moto.create();
Vehicle bike = new Bike();
bike.create();
}
}
Kết quả thu được như phần Abstract class.
Đa kế thừa trong Java sử dụng Interface
Trong Java, một lớp chỉ được thừa kế (extends) từ một lớp, có thể cài đặt (implements) nhiều interface. Tuy nhiên, một interface có thể thừa kế (extends) nhiều interface.
Một interface không thể cài đặt (implements) interface khác, do interface không phần cài đặt, chỉ chứa các khai báo.
Ví dụ: 1 người vừa làm giáo viên, vừa làm bác sĩ. Ta xây dựng các lớp như sau
Interface Teacher:
package com.company;
public interface Teacher {
public void teaching();
}
Interface Doctor:
package com.company;
public interface Doctor {
public void injecting();
}
LớpPeople:
package com.company;
public class People implements Doctor,Teacher {
@Override
public void injecting() {
System.out.println("Injecting...");
}
@Override
public void teaching() {
System.out.println("Teaching...");
}
}
Lớp Main
package com.company;
public class Main {
public static void main(String args[]) {
People people = new People();
people.teaching();
people.injecting();
}
}
Kết quả thu được:
Teaching...
Injecting...
3. Sự khác nhau giữa Abstract class và Interface
Abstract class | Interface | |
---|---|---|
Multiple inheritance | Không hỗ trợ đa thừa kế | Một class có thể hiện thực nhiều interface.(tạm coi là thừa kế) |
Default implementation | Có thể định nghĩa thân phương thức, property | Không thể định nghĩa code xử lý, chỉ có thể khai báo. |
Access Modifiers | Có thể xác định modifier | Mọi phương thức, property đều mặc định là public. |
Adding functionality | Không cần thiết | Mọi phương thức, property của interface cần được hiện thực trong class. |
Nói về Abtract class và Interface, đôi khi bạn sẽ gặp một số cách gọi: Khi một lớp kế thừa một class/ abtract class thì có nghĩa là ta đang thể hiện mối quan hệ is-a (là), còn khi implement một interface, thì ta đang thể hiện mối quan hệ has-a (có, hay thực hiện).
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: Tổng quan ngôn ngữ Java
- Bài 2: Hướng dẫn cài đặt và cấu hình Java
- Bài 3: Hướng dẫn cài đặt và cấu hình Intellij IDEA trên Window
- Bài 4: Tạo Project và làm quen với Intelij IDEA
- Bài 5: Cú pháp và quy tắc cơ bản trong Java
- Bài 6: Các kiểu dữ liệu trong Java
- Bài 7: Các kiểu biến trong Java
- Bài 8: Toán tử trong Java
- Bài 9: Hệ thống Unicode trong Java
- Bài 10: Các kiểu vòng lặp
- Bài 11: Câu lệnh điều khiển rẽ nhánh
- Bài 12: Câu lệnh Break, Continue trong Java
- Bài 13: Lớp và đối tượng
- Bài 14: Tính chất của lập trình hướng đối tượng trong Java
- Bài 15: Abstract class và Interface trong Java
- Bài 16: Từ khóa super và this trong Java
- Bài 17: Từ khóa static và final trong Java
- Bài 18: Mảng (Array) trong Java
- Bài 19: Package trong Java
- Bài 21: String trong Java
- Bài 22: StringBuffer và StringBuilder
- Bài 23: Tổng quan về File và I/O
- Bài 24: Xử lý nhập xuất bằng Byte Stream và Character Stream
- Bài 25: Thao tác với tệp và thư mục trong Java
- Bài 26: Tổng quan về Collection trong Java
- Bài 27: Những Interface phổ biến trong Java Collection Framework
- Bài 28: Những Class được triển khai dựa trên Interface của Java Collection
- Bài 29: Khái niệm xử lý ngoại lệ trong Java
- Bài 30: Hướng dẫn xử lý ngoại lệ trong Java
- Bài 31: Đa luồng trong Java
- Bài 32: Thread synchronization trong Java
- Bài 33: Tổng quan về Java AWT
- Bài 34: Container trong Java AWT
- Bài 35: Component trong Java AWT
- Bài 36: Layout Manager trong Java AWT
- Bài 37: Xử lý sự kiện trong Java AWT
- Bài 38: Tổng quan về Java Swing
- Bài 39: Container trong Java Swing
- Bài 40: Component trong Java Swing
- Bài 41: Layout trong Java Swing
- Bài 42: Event trong Java Swing
- Bài 43: Menu trong Java Swing
- Bài 44: Kết nối cơ sở dữ liệu với thư viện JDBC trong Java