Interface trong java là gì, interface trong lập trình hướng Đối tượng java
Trong bài này, tôi sẽ trình làng về lớp trừu tượng (abstract class) cùng interface trong Java, bên cạnh đó so sánh sự giống với không giống nhau giữa chúng.
Bạn đang xem: Interface trong java là gì, interface trong lập trình hướng Đối tượng java
Các tính chất của lập trình sẵn hướng đối tượng, các bạn có thể coi làm việc bài xích viết: 4 đặc điểm của thiết kế hướng đối tượng người sử dụng trong Java.
Lớp trừu tượng (Abstract Class) vào Java
Đặc điểm của lớp trừu tượng (abstract class)
Một lớp được khai báo cùng với trường đoản cú khóa abstract là lớp trừu tượng (abstract class).
Lớp trừu tượng rất có thể tất cả các phương thức abstract hoặc non-abtract.
Lớp trừu tượng có thể knhị báo 0, 1 hoặc các method trừu tượng bên phía trong.
Không thể khởi chế tác 1 đối tượng trực tiếp xuất phát từ 1 class trừu tượng.
Một lớp thừa kế từ lớp trừu tượng (subclass – lớp con) không cần thiết phải implement non-abstract methods, nhưng mà số đông method làm sao tất cả abstract thì bắt buộc phải override. Trừ Lúc subclass cũng chính là abstract.
Cú pháp:
abstract class
Phương thơm thức trừu tượng vào Java
Một phương thức được knhì báo là abstract cùng không có trình xúc tiến thì đó là thủ tục trừu tượng (abstract method).Nếu bạn muốn một tấm cất một cách tiến hành rõ ràng mà lại bạn muốn tiến hành đích thực cách làm kia và để được ra quyết định vì các lớp nhỏ, thì bạn có thể khai báo thủ tục đó trong lớp cha sống dạng abstract.Từ khóa abstract được áp dụng nhằm khai báo một cách làm dạng abstract. Phương thức abstract vẫn không có định nghĩa, được theo sau vì chưng lốt chnóng phẩy, không có vết ngoặc nhọn theo sau.Cú pháp:abstract void ();
Ví dụ về lớp trừu tượng với cách làm trừu tượng
Ví dụ: Viết công tác vẽ một hình ngẫu nhiên với red color, làm sao để cho biện pháp áp dụng là giống nhau, bất kỳ sẽ là hình gì. Hình kia có thể là hình chữ nhật (rectangle), hình tròn (circle), tam giác (triangle), con đường (line), …Với đề nghị trên, tôi chế tạo một tấm trừu tượng Shape. Lớp này hỗ trợ một cách làm trừu tượng draw, cách tiến hành này nhằm bảo đảm rằng tất cả những hình đều phải có cùng bí quyết sử dụng (draw). Ngoài ra, bao gồm cách tiến hành không trừu tượng getColor nhằm hỗ trợ màu sắc thực hiện chung cho toàn bộ những hình. Tiếp theo, tôi tạo 2 lớp Rectangle cùng Circle thừa kế trường đoản cú lớp Shape, 2 lớp này có các phương pháp giải pháp xử lý draw khác biệt. Cuối thuộc, tôi tạo class ShapeApp, điện thoại tư vấn phương thức draw để vẽ hình theo trải đời.
Shape.java
public abstract class Shape private String color = "red";public Shape() public abstract void draw();public String getColor() return color;Rectangle.java
public class Rectangle extends Shape
Overridepublic void draw() System.out.println("Draw " + super.getColor() + " rectangle");Circle.java
public class Circle extends Shape
Overridepublic void draw() System.out.println("Draw " + super.getColor() + " circle");ShapeApp.java
public class ShapeApp public static void main(String<> args) Shape rect = new Rectangle();rect.draw();System.out.println("---");Shape circle = new Circle();circle.draw();Kết quả:
Draw red rectangle---Draw red circle
Một vài lưu lại ý
Lớp nhỏ sẽ phải cài đặt (implement) toàn bộ những thủ tục trừu tượng của lớp chaquý khách hàng cảm nhận thông báo lỗi ví như lớp con ko thiết đặt (implement) tất cả các phương thức trừu tượng của lớp cha: The type Triangle must implement the inherited abstract method Shape.draw().

Interface vào Java
Đặc điểm của Interface
Các phương thức trong interface gần như là các cách thức trừu tượng.Interface là 1 trong nghệ thuật để thu được xem trừu tượng hoàn toàn và đa kế thừa vào Java.Interface luôn luôn tất cả modifier là: public interface, mặc dầu các bạn có khai báo rõ hay là không.Nếu bao gồm các trường (field) thì chúng đầy đủ là: public static final, mặc dầu chúng ta bao gồm knhị báo rõ hay là không.Các method của chính nó hầu hết là method trừu tượng, tức thị không có thân hàm, và đều phải sở hữu modifier là: public abstract, mặc dầu bạn tất cả knhị báo hay là không.Interface không tồn tại hàm khởi tạo ra (constructor).Một interface chưa phải là 1 trong những lớp. Viết một interface y hệt như viết một lớp, tuy nhiên bọn chúng có 2 tư tưởng khác biệt. Một lớp biểu đạt những nằm trong tính với hành động của một đối tượng. Một interface đựng những hành động nhưng mà một class thực thi.Trừ lúc 1 lớp xúc tiến interface là lớp trừu tượng abstract, sót lại tất cả những cách tiến hành của interface cần phải khái niệm vào class.Java Compiler thêm trường đoản cú khóa public abstract trước cách tiến hành của interface cùng những tự khóa public static final trước các member tài liệu.
Một interface tương tự với một class vị số đông điểm sau đây:
Một interface được viết trong một tệp tin với định dạng .java, cùng với thương hiệu của interface giống như tên của tệp tin.Bytecode của interface được lưu lại trong file có format .class.Khai báo interface vào một package, đều tệp tin bytecode tương xứng cũng có thể có kết cấu thỏng mục tất cả cùng tên package.Một interface khác với cùng một class sinh sống một số trong những điểm sau đây:
Quý Khách quan trọng khởi tạo một interface.Một interface ko đựng bất kể hàm Contructor nào.Tất cả những cách làm của interface đông đảo là abstract.Một interface bắt buộc chứa một ngôi trường nào trừ những ngôi trường vừa static với final.Một interface quan yếu kế thừa từ lớp, nó được triển khai vì chưng một tờ.Một interface rất có thể thừa kế từ rất nhiều interface khác.lấy ví dụ sử dụng Interface vào Java
Tương tự nhỏng từng trải nghỉ ngơi ví dụ về thực hiện abstract class làm việc trên, tuy thế tôi đã dụng Interface nhằm áp dụng vào chương trình.
Shape.java
public interface Shape String color = "red";void draw();Rectangle.java
public class Rectangle implements Shape
Overridepublic void draw() System.out.println("Draw " + color + " rectangle");Circle.java
public class Circle implements Shape
Overridepublic void draw() System.out.println("Draw " + color + " circle");ShapeApp.java
public class ShapeApp public static void main(String<> args) Shape rect = new Rectangle();rect.draw();System.out.println("---");Shape circle = new Circle();circle.draw();Kết quả:
Draw red rectangle---Draw red circlekhi ghi đtrằn các cách thức được quan niệm vào interface, gồm một trong những qui tắc sau:
Các checked exception không nên được khai báo trong cách thức implements, gắng vào kia nó đề xuất được khai báo trong cách thức interface hoặc những lớp phụ được knhì báo vày thủ tục interface.Signature (ký số) của phương thức interface với kiểu dáng trả về phải được duy trì Lúc ghi đtrần cách thức (overriding method).Một lớp xúc tiến bao gồm nó hoàn toàn có thể là abstract và chính vì thế các cách tiến hành interface ko rất cần phải thực thi.khi thực thi interface, có vài quy tắc sau:
Một lớp rất có thể tiến hành một hoặc nhiều interface tại một thời điểm.Một lớp chỉ rất có thể thừa kế một tấm không giống, mà lại được triển khai những interface.Một interface hoàn toàn có thể thừa kế xuất phát điểm từ một interface không giống, giống như biện pháp một lớp có thể kế thừa lớp khác.Đa thừa kế vào Java vì chưng Interface
Nếu một lớp thực hiện đa kế thừa, hoặc một Interface thừa kế từ rất nhiều Interface thì đó là nhiều thừa kế.
Trong Java, một tờ chỉ được quá kế (extends) xuất phát điểm từ một lớp, rất có thể thiết đặt (implements) những interface. Tuy nhiên, một interface hoàn toàn có thể thừa kế (extends) những interface.
Một interface không thể thiết lập (implements) interface không giống, bởi vì interface không phần cài đặt, chỉ chứa các knhị báo.
lấy ví dụ như một lớp thiết lập (implements) nhiều interface:
public interface Shape void draw();public interface màu sắc String getColor();public class Rectangle implements Shape, Màu sắc
Overridepublic String getColor() return "red";lấy ví dụ như interface kế thừa (extend) các interface
public interface Shape void draw();public interface Color String getColor();public interface ShapeColor extends Shape, Màu sắc public class Circle implements ShapeMàu sắc
Overridepublic String getColor() return "red";Câu hỏi: Đa thừa kế ko được hỗ trợ thông qua lớp trong Java nhưng mà là hoàn toàn có thể vì Interface, trên sao?
Nhỏng đã ra mắt, kế thừa không được cung ứng thông qua lớp. Nhưng nó được hỗ trợ vì chưng Interface bởi vì không có tính lưỡng nghĩa Khi trình xúc tiến được cung ứng vì lớp Implementation.
lấy một ví dụ nhiều vượt kế với Interface
public interface Printable void print(); public interface Showable void print(); public class InterfaceDemo implements Printable, Showable public void print() System.out.println("Welcome khổng lồ evolutsionataizmama.com"); public static void main(String args<>) InterfaceDemo obj = new InterfaceDemo(); obj.print(); Trong ví dụ bên trên, interface Printable và Showable bao gồm cùng những thủ tục print() nhưng lại trình thực hiện của nó được hỗ trợ vày lớp InterfaceDemo, chính vì thế không tồn tại tính lưỡng nghĩa ở đây.
lấy ví dụ như nhiều vượt kế cùng với class
public class Printable void print() System.out.println("Printable"); public class Showable void print() System.out.println("Showable"); // Không thể thực hiện đa vượt kế cùng với classpublic class InterfaceDemo extends Printable, Showable public static void main(String args<>) InterfaceDemo obj = new InterfaceDemo(); obj.print(); // Không thể xác định được gọi cách làm print() của class nào Trong ví dụ trên, lớp Printable với Showable tất cả cùng các cách tiến hành print() với InterfaceDemo thừa kế 2 class đó không override lại thủ tục print() yêu cầu trình biên dịch chần chờ triển khai thủ tục print() của lớp Printable tuyệt là của lớp Showable. Để đảm bảo an toàn cùng bớt tính phức hợp của khối hệ thống yêu cầu Java ko hỗ trợ nhiều quá kế so với class.
Marker (tốt Tagging) Interface trong Java là gì?
Đó là 1 trong những Interface nhưng mà không có thành viên làm sao. Ví dụ: Serializable, Cloneable, Remote, … Chúng được sử dụng để hỗ trợ một trong những đọc tin rất cần thiết cho tới JVM để mà lại JVM có thể thực hiện một số trong những hoạt động bổ ích.
Ví dụ
public interface Serializable Có nhì mục đích thi công đa số của tagging interface là:
Tạo một phụ thân chung: Như với EventListener interface, mà được thừa kế vày hàng tá các interface không giống trong Java API, chúng ta cũng có thể thực hiện một tagging interface để tạo thành một phụ vương thông thường cho một tổ interface. lấy ví dụ như, khi một interface kế thừa EventListener, thì JVM hiểu được interface ví dụ này đang được sử dụng vào một sự kiện.Thêm một vẻ bên ngoài dữ liệu cho tới một class: Đó là có mang tagging. Một class mà xúc tiến một tagging interface không nên tư tưởng ngẫu nhiên phương thức làm sao, nhưng class phát triển thành một hình trạng interface trải qua tính nhiều hình (polymorphism).Interface lồng nhau vào Java
Một Interface có thể bao gồm Interface khác, đó là lồng Interface.
Ví dụ:
interface Printable void print();interface MessagePrintable void msg();
So sánh abstract class cùng interface vào Java
Lớp trừu tượng (abstract class) | Interface |
Thể hiện tính trừu tượng Phiên bạn dạng Java 9, hoàn toàn có thể thêm private methods. | |
Lớp trừu tượng không hỗ trợ đa kế thừa | Interface hỗ trợ đa kế thừa |
Lớp trừu tượng rất có thể tất cả những biến final, non-final, static và non-static | Interface chỉ gồm các biến static final |
Lớp trừu tượng hoàn toàn có thể gồm cách thức static, cách làm main và constructor | Interface bắt buộc tất cả cách tiến hành static, main hoặc constructor. |
Từ khóa abstract được sử dụng nhằm khai báo lớp trừu tượng | Từ khóa interface được sử dụng nhằm knhị báo Interface |
Lớp trừu tượng có thể cung cấp trình tiến hành của Interface | Interface không cung cấp trình tiến hành cụ thể của lớp abstract |
Ví dụ: public abstract class Shape public abstract void draw(); | Ví dụ: public interface Drawable void draw(); |
Sử dụng Abstract class Lúc chúng ta chỉ rất có thể ngừng một vài ba tác dụng (method/ function) chuẩn của hệ thống, một vài công dụng sót lại những lớp extends đề nghị dứt. Những công dụng sẽ dứt này vẫn sử dụng nhỏng thông thường, đấy là số đông tính năng tầm thường. | Sử dụng Interface Lúc bạn muốn sinh sản dựng một cỗ khung chuẩn tất cả các chức năng (method/ function) mà lại tất cả module/ project cần được có. Các module phải implements toàn bộ tác dụng đã làm được quan niệm. |
Nói về Abtract Class với Interface, đôi lúc bạn sẽ gặp một trong những bí quyết gọi: khi một class extend một class/ abtract class thì Tức là ta đã bộc lộ côn trùng quan hệ is-a (là), còn khi implement một interface, thì ta đã biểu lộ côn trùng quan hệ has-a (bao gồm, hay thực hiện).
Ví dụ:
// Programmer là Person, triển khai việc Programming, Debuggingclass Programmer extends Person implements Programming, Debugging // Rectangle là Shape, có Width, Heightclass Rectangle extends Shape implements Width, Height Tài liệu tđắm say khảo