TẠI SAO JAVA KHÔNG HỖ TRỢ ĐA KẾ THỪA

*

Interface là gì? Interface khác gì Class? Đa thừa kế vào Java áp dụng Interface như vậy nào? ví dụ như minc họa


Trong bài viết này chúng ta sẽ đi trả lời phần lớn câu hỏi về interface: đặc điểm của interface? So sánh interface với Class? Đa quá kế trong Java thực hiện Interface như vậy nào? Marker (xuất xắc Tagging) Interface là gì? Interface lồng nhau trong Java? Cùng cùng với các ví dụ minch họa


*

1. Interface trong Java

đặc điểm của Interface:

Các thủ tục trong interface các là các thủ tục trừu tượng.Interface là 1 trong chuyên môn để thu được xem trừu tượng trọn vẹn cùng đa thừa kế trong Java.Interface luôn luôn luôn gồm modifier là:public interface, cho dù các bạn bao gồm khai báo rõ hay không.Nếu có các trường (field) thì bọn chúng phần lớn là:public static final, mặc dù các bạn tất cả knhì báo rõ hay không.Các method của chính nó các là method trừu tượng, nghĩa là không tồn tại thân hàm, với đều sở hữu modifier là:public abstract, mặc dù các bạn tất cả knhị báo hay là không.Interface không có hàm khởi sản xuất (constructor).Một interface không phải là một trong lớp. Viết một interface y như viết một tấm, tuy thế chúng tất cả 2 quan niệm không giống nhau. Một lớp biểu đạt những trực thuộc tính cùng hành động của một đối tượng người dùng. Một interface đựng những hành động mà một class triển khai.Trừ khi 1 lớp thực hiện interface là lớp trừu tượng abstract, còn sót lại tất cả các cách thức của interface cần được định nghĩa vào class.

Bạn đang xem: Tại sao java không hỗ trợ đa kế thừa

Java Compiler thêm tự khóapublic abstracttrước cách thức của interface cùng các từ bỏ khóapublic static finaltrước các member dữ liệu.

2. Điểm tương đương và khác biệt giữa Interface với Class

Một interface tương tự như với 1 class do những điểm sau đây:

Một interface được viết trong một file với định hình .java, cùng với thương hiệu của interface giống thương hiệu của file.Bytecode của interface được lưu lại vào tệp tin tất cả định hình .class.Knhị báo interface vào một package, phần nhiều tệp tin bytecode khớp ứng cũng có thể có kết cấu tlỗi mục có thuộc tên package.

Một interface không giống với 1 class sống một số điểm sau đây:

Quý Khách chẳng thể khởi chế tạo ra một interface.Một interface ko cất bất kể hàm Contructor làm sao.Tất cả các cách thức của interface số đông là abstract.Một interface tất yêu đựng một trường như thế nào trừ những trường vừa static cùng final.Một interface cần thiết thừa kế tự lớp, nó được xúc tiến bởi vì một tờ.Một interface có thể kế thừa từ nhiều interface khác.

3. lấy một ví dụ sử dụng Interface trong Java

Ví dụ: Viết chương trình vẽ một hình bất kỳ với red color, làm sao để cho giải pháp sử dụng là như thể nhau, bất kể đó là hình gì. Hình đó hoàn toàn có thể làhình chữ nhật (rectangle), hình trụ (circle), tam giác (triangle), mặt đường (line), …

Shape.java

public interface Shape String color = "red"; void draw(); Rectangle.java

public class Rectangle implements Shape
Override public void draw() System.out.println("Draw " + color + " rectangle"); Circle.java

public class Circle implements Shape
Override public 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 circle4. Một vài lưu lại ý

Lúc ghi đtrằn các phương thức được quan niệm vào interface, có một vài qui tắc sau:

Các checked exception không nên được khai báo trong cách làm implements, cầm vào đó nó đề xuất được khai báo vào cách tiến hành interface hoặc các lớp prúc được khai báo vị phương thức interface.Signature (cam kết số) của cách làm interface với dạng hình trả về cần được duy trì lúc ghi đtrằn cách tiến hành (overriding method).Một lớp xúc tiến bao gồm nó rất có thể là abstract với chính vì như thế các thủ tục interface không cần được xúc tiến.

khi thực thi interface, gồm vài ba phép tắc sau:

Một lớp có thể triển khai một hoặc các interface trên một thời điểm.Một lớp chỉ hoàn toàn có thể thừa kế một tấm không giống, nhưng mà được thực thi nhiều interface.Một interface rất có thể kế thừa từ một interface không giống, tương tự như bí quyết một lớp hoàn toàn có thể kế thừa lớp không giống.

5. Đa thừakế vào Java sử dụng Interface

Nếu một tờ tiến hành đa kế thừa, hoặc một Interface thừa kế từ rất nhiều Interface thì đó là nhiều kế thừa.

Trong Java, một tờ chỉ được thừa kế (extends) xuất phát từ 1 lớp, hoàn toàn có thể setup (implements) nhiều interface. Tuy nhiên, một interface rất có thể thừa kế (extends) nhiều interface.

Xem thêm: Từ Vựng Tiếng Anh Về Kinh Doanh Tự Do Tiếng Anh Là Gì ? Tự Do Kinh Doanh Là Gì

Một interface quan yếu thiết lập (implements) interface khác, vày interface ko phần cài đặt, chỉ chứa những knhì báo.

lấy ví dụ như một tờ setup (implements) các interface:

public interface Shape void draw(); public interface màu sắc String getColor(); public class Rectangle implements Shape, Màu sắc
Override public String getColor() return "red"; lấy một ví dụ interface kế thừa (extend) các interface:

public interface Shape void draw(); public interface Color String getColor(); public interface ShapeMàu sắc extends Shape, Color public class Circle implements ShapeColor
Override public String getColor() return "red"; Câu hỏi: Đa thừa kế ko được cung cấp thông qua lớp bên trong Java mà lại là hoàn toàn có thể vị Interface, trên sao?

Như đã trình làng, thừa kế không được cung cấp trải qua lớp. Nhưng nó được cung ứng bởi vì Interface bởi vì không tồn tại tính lưỡng nghĩa lúc trình thực hiện được cung ứng do lớp Implementation.

lấy ví dụ như nhiều vượt kế cùng 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ồ gpcoder.com"); public static void main(String args<>) InterfaceDemo obj = new InterfaceDemo(); obj.print(); Trong ví dụ trên, interfacePrintableShowablebao gồm cùng những phương thứcprint()tuy nhiên trình tiến hành của chính nó được cung ứng vì chưng lớpInterfaceDemo, chính vì như vậy không tồn tại tính lưỡng nghĩa ở đây.

lấy ví dụ nhiều thừa kế với class

public class Printable void print() System.out.println("Printable"); public class Showable void print() System.out.println("Showable"); // Không thể tiến hành đa quá kế với classpublic class InterfaceDemo extends Printable, Showable public static void main(String args<>) InterfaceDemo obj = new InterfaceDemo(); obj.print(); // Không thể khẳng định được Call thủ tục print() của class như thế nào Trong ví dụ trên, lớpPrintableShowablebao gồm thuộc các phương thơm thứcprint()vàInterfaceDemo kế thừa 2 class kia ko override lại phương thơm thứcprint()phải trình biên dịch lần khần xúc tiến phương thứcprint()của lớpPrintablehay là của lớpShowable. Để bảo đảm bình yên và giảm tính tinh vi của hệ thống đề xuất Java ko cung cấp đa quá kế đối với class.

Marker (tốt Tagging) Interface vào Java là gì?

Đó là một Interface nhưng mà không có thành viên như thế nào. Ví dụ: Serializable, Cloneable, Remote, … Chúng được sử dụng để hỗ trợ một số thông báo thiết yếu tới JVM để nhưng JVM rất có thể thực hiện một trong những hoạt động có ích.

Ví dụ:

public interface Serializable Có hai 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, cơ mà được thừa kế bởi vì mặt hàng tá những interface khác trong Java API, bạn có thể sử dụng một tagging interface nhằm tạo thành một thân phụ phổ biến cho một nhóm interface. lấy ví dụ, lúc một interface kế thừa EventListener, thì JVM biết rằng interface rõ ràng này đang rất được thực hiện vào một sự kiện.Thêm một hình dạng dữ liệu tới một class: Đó là định nghĩa tagging. Một class cơ mà xúc tiến một tagging interface ko phải tư tưởng bất kỳ cách thức nào, nhưng mà class phát triển thành một đẳng cấp interface thông qua tính nhiều hình (polymorphism).

Interface lồng nhau vào Java

Một Interface rất có thể tất cả Interface không giống, chính là lồng Interface.

Ví dụ:

interface Printable void print(); interface MessagePrintable void msg();