Kinh Nghiệm về Abstract là gì trong Java Chi Tiết

Quý khách đang tìm kiếm từ khóa Abstract là gì trong Java được Update vào lúc : 2022-11-17 14:20:00 . Với phương châm chia sẻ Bí quyết Hướng dẫn trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi đọc Post vẫn ko hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Ad lý giải và hướng dẫn lại nha.

Trong bài này, tôi sẽ trình làng về lớp trừu tượng (abstract class) và interface trong Java, đồng thời phân tích sự giống và rất khác nhau giữa chúng.

Các tính chất của lập trình hướng đối tượng người dùng, những bạn hoàn toàn có thể xem ở nội dung bài viết: 4 tính chất của lập trình hướng đối tượng người dùng trong Java.

Lớp trừu tượng (Abstract Class) trong Java

Đặc điểm của lớp trừu tượng (abstract class)

Một lớp được khai báo với từ khóa abstract là lớp trừu tượng (abstract class).

Lớp trừu tượng hoàn toàn có thể có những phương thức abstract hoặc non-abtract.

Lớp trừu tượng hoàn toàn có thể khai báo 0, 1 hoặc nhiều method trừu tượng bên trong.

Không thể khởi tạo 1 đối tượng người dùng trực tiếp từ một class trừu tượng.

Một lớp thừa kế từ lớp trừu tượng (subclass lớp con) tránh việc phải implement non-abstract methods, nhưng những method nào có abstract thì nên phải override. Trừ khi subclass cũng là abstract.

Cú pháp:

abstract class

Phương thức trừu tượng trong Java

    Một phương thức được khai báo là abstract và không còn 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 rõ ràng nhưng bạn muốn triển khai thực sự phương thức đó để được quyết định hành động bởi những lớp con, thì bạn hoàn toà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òn còn định nghĩa, được theo sau bởi dấu chấm phẩy, không còn dấu ngoặc nhọn theo sau.

Cú pháp:

abstract void ();

Ví dụ về lớp trừu tượng và phương thức trừu tượng

Ví dụ: Viết chương trình vẽ một hình bất kỳ với red color, sao cho cách sử dụng là giống 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òn trụ (circle), tam giác (triangle), đường (line),

Với yêu cầu trên, tôi tạo một lớp trừu tượng Shape. Lớp này phục vụ một phương thức trừu tượng draw, phương thức này để đảm nói rằng toàn bộ những hình đều phải có cùng cách sử dụng (draw). Ngoài ra, có phương thức không trừu tượng getColor để phục vụ màu sử dụng chung cho toàn bộ những hình. Tiếp theo, tôi tạo 2 lớp Rectangle và Circle thừa kế từ lớp Shape, 2 lớp này còn có những cách xử lý draw rất khác nhau. Cuối cùng, tôi tạo classShapeApp, gọi phương thức draw để vẽ hình theo yêu cầu.

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

@Override
public void draw()
System.out.println(“Draw ” + super.getColor() + ” rectangle”);

Circle.java

public class Circle extends Shape

@Override
public 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ớp con nên phải setup (implement) toàn bộ những phương thức trừu tượng của lớp cha

Bạn nhận được tin báo lỗi nếu lớp con không setup (implement) toàn bộ những phương thức trừu tượng của lớp cha: The type Triangle must implement the inherited abstract method Shape.draw().

Không thể khởi tạo trực tiếp một lớp trừu tượng

Bạn nhận được tin báo lỗi khi cố ý khởi tạo một lớp trừu tượng: Cannot instantiate the type Shape.

Interface trong Java

Đặc điểm của Interface

    Các phương thức trong interface đều là những phương thức trừu tượng.Interface là một kỹ thuật để thu được xem trừu tượng hoàn toàn và đa thừa kế trong Java.Interface luôn luôn có modifier là:public interface, mặc dầu bạn có khai báo rõ hay là không.Nếu có những trường (field) thì chúng đều là:public static final, mặc dầu bạn có khai báo rõ hay là không.Các method của nó đều là method trừu tượng, nghĩa là không còn thân hàm, và đều phải có modifier là:public abstract, mặc dầu bạn có khai báo hay là không.Interface không còn hàm khởi tạo (constructor).Một interface không phải là một lớp. Viết một interface in như viết một lớp, nhưng chúng có 2 định nghĩa rất khác nhau. Một lớp mô tả những thuộc tính và hành vi của một đối tượng người dùng. Một interface chứa những hành vi mà một class triển khai.Trừ khi một lớp triển khai interface là lớp trừu tượng abstract, còn sót lại toàn bộ những phương thức của interface cần phải định nghĩa trong class.

Java Compiler thêm từ khóa public abstract trước phương thức của interface và những từ khóa public static final trước những thành viên tài liệu.

Một interface tương tự với một class bởi những điểm sau nà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 luôn có thể 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ố trong những điểm sau này:

    Bạn không thể khởi tạo một interface.Một interface không chứa bất kể hàm Contructor nào.Tất cả những 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ừ những trường vừa static và final.Một interface không thể thừa kế từ lớp, nó được triển khai bởi một lớp.Một interface hoàn toàn có thể thừa kế từ nhiều interface khác.

Ví dụ sử dụng Interface trong Java

Tương tự như yêu cầu ở ví dụ về sử dụng abstract class ở trên, nhưng tôi sẽ dụng Interface để vận 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

@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 circle

Khi ghi đè những phương thức được định nghĩa trong interface, có một số trong những qui tắc sau:

    Các checked exception tránh việc được khai báo trong phương thức implements, thay vào đó nó nên được khai báo trong phương thức interface hoặc những lớp phụ được khai báo bởi phương thức interface.Signature (ký số) của phương thức interface và kiểu trả về nên được duy trì khi ghi đè phương thức (overriding method).Một lớp triển khai chính nó hoàn toàn có thể là abstract và vì thế những phương thức interface không cần thiết phải triển khai.

Khi triển khai interface, có vài quy tắc sau:

    Một lớp hoàn toàn có thể triển khai một hoặc nhiều interface tại thuở nào điểm.Một lớp chỉ hoàn toàn có thể thừa kế một lớp khác, nhưng được triển khai nhiều interface.Một interface hoàn toàn có thể thừa kế từ một interface khác, tương tự cách một lớp hoàn toàn có thể thừa kế lớp khác.

Đa thừakế trong Java bởi Interface

Nếu một lớp triển khai đa thừa kế, hoặc một Interface thừa kế từ nhiều Interface thì đó là đa thừa kế.

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

Một interface không thể setup (implements) interface khác, do interface không phần setup, chỉ chứa những khai báo.

Ví dụ một lớp setup (implements) nhiều interface:

public interface Shape
void draw();

public interface Color
String getColor();

public class Rectangle implements Shape, Color

@Override
public void draw()
System.out.println(“Draw ” + this.getColor() + ” rectangle”);

@Override
public String getColor()
return “red”;

Ví dụ interface thừa kế (extend) nhiều interface

public interface Shape
void draw();

public interface Color
String getColor();

public interface ShapeColor extends Shape, Color

public class Circle implements ShapeColor

@Override
public void draw()
System.out.println(“Draw ” + this.getColor() + ” circle”);

@Override
public String getColor()
return “red”;

Câu hỏi: Đa thừa kế không được tương hỗ thông qua lớp trong Java nhưng là hoàn toàn có thể bởi Interface, tại sao?

Như đã trình làng, thừa kế không được tương hỗ thông qua lớp. Nhưng nó được tương hỗ bởi Interface chính bới không còn tính lưỡng nghĩa khi trình triển khai được phục vụ bởi lớp Implementation.

Ví dụ đa thừa 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 to gpcoder”);

public static void main(String args[])
InterfaceDemo obj = new InterfaceDemo();
obj.print();

Trong ví dụ trên, interface Printable và Showablecó cùng những phương thức print() nhưng trình triển khai của nó được phục vụ bởi lớp InterfaceDemo, vì thế không còn tính lưỡng nghĩa ở đây.

Ví dụ đa 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ể thực thi đa thừa kế với class
public class InterfaceDemo extends Printable, Showable
public static void main(String args[])
InterfaceDemo obj = new InterfaceDemo();
obj.print(); // Không thể xác lập được gọi phương thức print() của class nào

Trong ví dụ trên, lớpPrintable và Showablecó cùng những phương thức print() vàInterfaceDemo thừa kế 2 class đó không override lại phương thức print() nên trình biên dịch không biết thực thi phương thức print() của lớpPrintable hay là của lớpShowable. Để đảm bảo bảo vệ an toàn và uy tín và giảm tính phức tạp của khối mạng lưới hệ thống nên Java không tương hỗ đa thừa kế riêng với class.

Marker (hay Tagging) Interface trong Java là gì?

Đó là một Interface mà không còn thành viên nào. Ví dụ: Serializable, Cloneable, Remote, Chúng được sử dụng để phục vụ một số trong những thông tin thiết yếu tới JVM để mà JVM hoàn toàn có thể thực thi một số trong những hoạt động và sinh hoạt giải trí hữu ích.

Ví dụ

public interface Serializable

Có hai mục tiêu thiết kế hầu hết của tagging interface là:

    Tạo một cha chung: Như với EventListener interface, mà được thừa kế bởi hàng tá những interface khác trong Java API, bạn hoàn toàn có thể sử dụng một tagging interface để tạo một cha chung cho một nhóm interface. Ví dụ, khi một interface thừa kế EventListener, thì JVM biết rằng interface rõ ràng này đang rất được sử dụng trong một sự kiện.Thêm một kiểu tài liệu tới một class: Đó là khái niệm tagging. Một class mà triển khai một tagging interface không cần định nghĩa bất kỳ phương thức nào, nhưng class trở thành một kiểu interface thông qua tính đa hình (polymorphism).

Interface lồng nhau trong Java

Một Interface hoàn toàn có thể có Interface khác, đó là lồng Interface.

Ví dụ:

interface Printable
void print();

interface MessagePrintable
void msg();

So sánh abstract class và interface trong JavaLớp trừu tượng (abstract class)InterfaceThể hiện tính trừu tượng
Phiên bản Java 8, hoàn toàn có thể thêmdefault static methods.
Phiên bản Java 9, hoàn toàn có thể thêm private methods.Lớp trừu tượng không tương hỗ đa kế thừaInterface tương hỗđa thừa kếLớp trừu tượng hoàn toàn có thể có những biếnfinal, non-final, static và non-staticInterface chỉ có những biếnstatic finalLớp trừu tượng hoàn toàn có thể có phương thức static, phương thức main và constructorInterface không thể có phương thức static, main hoặc constructor.Từ khóa abstract được sử dụng để khai báo lớp trừu tượngTừ khóa interface được sử dụng để khai báo InterfaceLớp trừu tượng hoàn toàn có thể phục vụ trình triển khai của InterfaceInterface không phục vụ trình triển khai rõ ràng của lớp abstractVí dụ:
public abstract class Shape
public abstract void draw();
Ví dụ:
public interface Drawable
void draw();
Sử dụng Abstract class khi toàn bộ chúng ta chỉ hoàn toàn có thể hoàn thành xong một vài hiệu suất cao (method/ function) chuẩn của khối mạng lưới hệ thống, một vài hiệu suất cao còn sót lại những lớp extends phải hoàn thành xong. Những tính năng đã hoàn thành xong này vẫn sử dụng như thông thường, đấy là những tính năng chung.Sử dụng Interface khi bạn muốn tạo dựng một bộ khung chuẩn gồm những hiệu suất cao (method/ function) mà toàn bộ module/project nên phải có. Các module phảiimplements toàn bộ hiệu suất cao đã được định nghĩa.

Nói về Abtract Class và Interface, đôi lúc bạn sẽ gặp một số trong những cách gọi: Khi một class extendmột class/ abtract class thì nghĩa là ta đang thể hiện quan hệis-a(là), còn khiimplementmộtinterface, thì ta đang thể hiện quan hệhas-a(có, haythực hiện).

Ví dụ:

//Programmerlà Person,thực thi việcProgramming, Debugging

class Programmer extends Person implements Programming, Debugging

//Rectangle là Shape,cóWidth, Height

class Rectangle extends Shape implements Width, Height

Tài liệu tìm hiểu thêm

    ://.javatpoint/abstract-class-in-javahttps://.javatpoint/interface-in-javahttps://.javatpoint/difference-between-abstract-class-and-interfacehttps://docs.oracle/javase/tutorial/java/IandI/abstract.html

Nếu bạn thấy hay thì hãy chia sẻ nội dung bài viết cho mọi người nhé!

Hướng dẫn sử dụng plugin JadClipse để xem nội dung file .class

Xử lý ngoại lệ trong Java (Exception Handling)

Có thể bạn muốn xem:

    Tính đa hình (Polymorphism) trong Java (05/11/2022)Các nguyên tắc thiết kế hướng đối tượng người dùng SOLID (09/08/2022)Cơ chế Upcasting và Downcasting trong java (05/11/2022)Tính trừu tượng (Abstraction) trong Java (05/11/2022)Lớp lồng nhau trong java (Java inner class) (05/11/2022)

Bình luận

phản hồi

4533

Video Abstract là gì trong Java ?

Bạn vừa Read Post Với Một số hướng dẫn một cách rõ ràng hơn về Video Abstract là gì trong Java tiên tiến và phát triển nhất

Share Link Cập nhật Abstract là gì trong Java miễn phí

Bạn đang tìm một số trong những Share Link Cập nhật Abstract là gì trong Java Free.

Thảo Luận vướng mắc về Abstract là gì trong Java

Nếu sau khi đọc nội dung bài viết Abstract là gì trong Java vẫn chưa hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Mình lý giải và hướng dẫn lại nha
#Abstract #là #gì #trong #Java