Lớp trừu tượng là gì là một trong những từ khóa được gg search nhiều nhất về chủ đề lớp trừu tượng là gì. Trong bài viết này, cachthietkeweb.vn sẽ viết bài viết lớp trừu tượng là gì? Tại sao có lớp trừu tượng?
Lớp trừu tượng là gì? Tại sao có lớp trừu tượng?
Một lớp được khai báo với keyword abstract được xem như là lớp abstract trong Java. Nó có thể có các mẹo abstract hoặc non-abtract. Trước khi nghiên cứu về lớp trừu tượng trong Java, bạn cần hiểu tính trừu tượng trong Java là gì.
Tính trừu tượng (Abstraction) trong Java
Tính trừu tượng là một quá trình ẩn các chi tiết trình khai triển và chỉ hiển thị tính năng tới user. Nói mẹo khác, nó chỉ hiển thị các thứ cần thiết tới người dùng và ẩn các chi tiết nội tại, ví dụ: để gửi tin nhắn, user chỉ cần soạn text và gửi tin. Bạn k biết công cuộc giải quyết nội tại về cung cấp tin nhắn. Tính trừu tượng giúp bạn trọng tâm hơn vào phân khúc thay vì quan tâm đến hướng dẫn nó thực hiện.
Lớp abstract trong Java
Một lớp được khai báo là abstract thì đó là lớp trừu tượng. Nó cần được kế thừa và phương pháp của nó được triển khai. Nó không thể được khởi tạo.
dùng keyword abstract để khai báo một lớp abstract. keyword này xuất hiện trước từ khóa class trong khai báo lớp. Ví dụ:
abstractclass A{}
Có hai phương pháp để đạt được tính trừu tượng hóa trong Java:
- Lớp abstract (0 tới 100%)
- Interface (100%)
công thức trừu tượng trong Java
Một công thức được khai báo là abstract và không có trình khai triển thì đó là phương pháp trừu tượng.
Nếu bạn muốn một lớp chứa một phương pháp cụ thể nhưng bạn mong muốn khai triển thực sự cô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 bí quyết dạng abstract. Một cách thức abstract k có thân cách thức.
bí quyết abstract sẽ k có khái niệm, được theo sau bởi dấu chấm phảy, k có dấu ngoặc móc ôm theo sau:
abstractvoid printStatus();// Khai bao phuong thuc voi tu khoa abstract va khong co than phuong thuct
gợi ý về lớp trừu tượng và phương thức trừu tượng trong Java
Trong gợi ý này, Bike là lớp trừu tượng chỉ chứa một cách thức trừu tượng là run. Trình triển khai của nó được phân phối bởi lớp Honda.
// lop truu tuong BikeabstractclassBikeabstractvoid run();// phuong thuc truu tuong voi tu khoa abstract// lop Honda4 ke thua lop truu tuong Bike classHonda4extendsBikevoid run()System.out.println("Dang chay mot cach an toan..");// phuong thuc main() publicstaticvoid main(String args[])Bike obj =newHonda4(); obj.run();
Kế thừa lớp Abstract trong Java
Trong gợi ý này, Shape là lớp trừu tượng, trình triển khai của nó được phân phối bởi lớp Rectangle và lớp Circle. Hai lớp này kế thừa lớp trừu tượng Shape.
File: TestAbstraction1.java
// lop truu tuong ShapeabstractclassShapeabstractvoid draw();//Trong tinh huong nay, trinh trien khai duoc cung cap boi ai do, vi du: nguoi su dung cuoi cung nao doclassRectangleextendsShapevoid draw()System.out.println("Ve hinh chu nhat");classCircle1extendsShapevoid draw()System.out.println("Ve hinh tron");//Trong tinh huong nay, phuong thuc duoc goi boi lap trinh vien hoac nguoi dungclassTestAbstraction1publicstaticvoid main(String args[])Shape s=newCircle1();//Trong tinh huong nay, doi tuong duoc cung cap thong qua phuong thuc, chang han nhu getShape() s.draw();
Khi mình tạo sự thể hiện của lớp Rectangle (tại định dạng Shape s=new Circle1();), mẹo draw() của lớp Rectangle sẽ được triệu hồi.
đủ sức bạn chưa quen thuộc với phương thức viết chung tất cả các lớp trong cùng một file như trên và có thể sử dụng cho các bạn rối mắt. Trong ví dụ tiếp mình sẽ trình bày riêng rẽ từng file cho các bạn dễ hiểu.
chắc chắn, trong khi lập trình bất cứ ngôn ngữ nào, mỗi Class mà chúng ta xây dựng đều giúp cho cho một mục tiêu cụ thể nào đó. cho nên, bạn nên tạo các Class riêng rẽ trong từng file, đừng làm như trên nhé.
ví dụ không giống về Kế thừa lớp Abstract trong Java
trước hết mình có một lớp trừu tượng bank có phương pháp abstract có tên là getRateOfInterest() với mục đích để quét lãi suất của bank nói chung.
File: ngân hàng.java
abstractclassngân hàngabstractint getRateOfInterest();
Tiếp đó, mình có hai lớp SBI và PNB đại diện cho tên các bank và hai lớp này kế thừa lớp trừu tượng ngân hàng ở trên. Vì hai lớp này kế thừa lớp trừu tượng ngân hàng nên cả hai lớp phải phân phối trình khai triển cụ thể cho phương thức getRateOfInterest().
File: SBI.java
class SBI extendsbankint getRateOfInterest()return7;// bat buoc phai cung cap trinh trien khai cua getRateOfInterest
File: PNB.java
class PNB extendsbankint getRateOfInterest()return8;// bat buoc phai cung cap trinh trien khai cua getRateOfInterest
Và cuối cùng, lớp TestBank có phương pháp main() sẽ có content giống như sau:
classTestBankpublicstaticvoid main(String args[])// Tao mot doi tuong SBI moibank b=new SBI();//Neu doi tuong la PNB, phuong thuc cua PNB se duoc trieu hoiint interest=b.getRateOfInterest();//Trieu hoi phuong thuc cua SBISystem.out.println("Ti le lai suat la: "+interest+" %");
Lớp trừu tượng đủ nội lực có thành viên dữ liệu, phương pháp trừu tượng, constructor, và có thể cả mẹo main().
File: TestAbstraction2.java
//vi du ve lop abstract ảo co than phuong thuc abstractclassBikeBike()System.out.println("bike duoc tao");abstractvoid run();void changeGear()System.out.println("gear duoc thay doi");classHondaextendsBikevoid run()System.out.println("dang chay mot cach an toan..");classTestAbstraction2publicstaticvoid main(String args[])Bike obj =newHonda(); obj.run(); obj.changeGear();
Qui tắc: Nếu bạn đã kế thừa bất cứ lớp trừu tượng nào mà có bí quyết trừu tượng, thì bạn phải hoặc cung cấp trình triển khai của các mẹo của lớp trừu tượng này.
Lớp trừu tượng cũng có thể được dùng để phân phối một số trình khai triển của Interface. Trong tình huống này, user cuối cùng không thể bị bắt buộc phải ghi đè all mẹo của Interface đó.
Ghi chú: Nếu bạn mới học về Java, thì học Interface trước và bỏ qua ví dụ này.
// mot interface Ainterface Avoid a();void b();void c();void d();// lop truu tuong B ke thua interface Aabstractclass B implements A//trong vi du nay, lop truu tuong B co the chi cung cap trinh trien khai phuong thuc c()publicvoid c()System.out.println("Toi la C");// lop M ke thua lop truu tuong Bclass M extends B// bat buoc phai trien khai cac phuong thuc a(), b(), c()publicvoid a()System.out.println("Toi la a");publicvoid b()System.out.println("Toi la b");publicvoid d()System.out.println("Toi la d");// lop Test5 chua phuong thuc main() classTest5publicstaticvoid main(String args[]) A a=new M(); a.a(); a.b(); a.c(); a.d();
Ps: Đi sử dụng đủ sức hỏi về sự không giống nhau giữa abstract class và interface. Các bạn nên chú ý các mẹo của interface là abstract 100%, trong abstract class có thể có phương thức chẳng phải abstract. Trong thiết kế software, interface thường được sử dụng để chỉ 2 hay nhiều class cùng làm việc gì đó (ví dụ cùng in – Printable), trong khi abstract class thường hướng đến liên kết cha con trong lập trình hướng thị trường. Các bạn đủ sức đọc thêm https://stackoverflow.com/questions/479142/when-to-use-an-interface-instead-of-an-abstract-class-and-vice-versa
Các bạn đủ sức mua thêm kiềm hãm học JAVA CORE online VÀ áp dụng cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. khóa học có giá chỉ 300K, nhằm khuyến mại, tạo điều kiện cho sv cho thể mua khóa học.
content khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack
Loạt bài chỉ dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com
Follow Facebook một mình Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile…. Mới nhất của chúng tôi.
Nguồn: https://vietjack.com/